Dadas from html string

by borisjavier

JavaScript

// Datos de la base de datos
const f0 = 1719705600;
const f = 1722384000;
const per = "trimestral";

// Función para convertir períodos a meses
function getPayableMonths(period) {
    switch(period) {
        case "mensual": return 1; 
        case "bimensual": return 2; 
        case "trimestral": return 3; 
        case "semestral": return 6; 
        case "anual": return 12; 
        case "bianual": return 24;
        default: throw new Error("Período no reconocido");
    }
}

// Función para convertir Unix timestamp a formato "YYYY-MM-DD"
Date.prototype.toFormat = function() {
    const year = this.getUTCFullYear();
    const month = String(this.getUTCMonth() + 1).padStart(2, '0');
    const day = String(this.getUTCDate()).padStart(2, '0');
    return `${year}-${month}-${day}`;
};

// Calcular las fechas
const payableMonths = getPayableMonths(per);
const iniOf = f0;
const endOf = f - 86400; // Restar un día (86400 segundos)
const iniProy = f;
const iniOp = f + (payableMonths * 30 * 86400); // Aproximación de meses a segundos (30 días por mes)
const endGP = iniOp + (payableMonths * 30 * 86400); // Aproximación de meses a segundos (30 días por mes)

// Convertir timestamps a objetos Date
const iniOfDate = new Date(iniOf * 1000);
const endOfDate = new Date(endOf * 1000);
const iniProyDate = new Date(iniProy * 1000);
const iniOpDate = new Date(iniOp * 1000);
const endGPDate = new Date(endGP * 1000);

// Crear el objeto de fechas formateadas
const fechas = [{
    "iniOf": iniOfDate.toFormat(), 
    "endOf": endOfDate.toFormat(), 
    "iniProy": iniProyDate.toFormat(), 
    "iniOp": iniOpDate.toFormat(), 
    "endGP": endGPDate.toFormat()
}];

// Mostrar el resultado
console.log(fechas);

// Salida esperada (ejemplo, las fechas exactas dependen de los valores de timestamp):
// [{
//     "iniOf": "2024-08-30",
//     "endOf": "2024-09-29",
//     "iniProy": "2024-09-30",
//     "iniOp": "2024-12-29",
//     "endGP": "2025-03-29"
// }]
const f1 =...