fechas
by borisjavier
HTML
<select class="form-control" name="perTot" id="perTot">
<option value="1" lang="en" data-lang-token="ano">1 año</option>
<option value="2" lang="en" data-lang-token="anos">2 años</option>
<option value="3" lang="en" data-lang-token="anosano">3 años</option>
</select>
<div id="showMe"></div>
<br>
<div id="showMe1"></div>
<input type="hidden" id="dataDts"/>
JavaScript
/*document.getElementById('perTot').addEventListener('change', function() {
const perTot = parseInt(this.value);
// El arreglo fechas debe ser convertido de JSON a un objeto de JavaScript
let fechas = JSON.parse('[{"iniOf":"2024-04-30","endOf":"2024-09-29","iniProy":"2024-09-30","iniOp":"2025-09-25","endGP":"2026-09-20","endPay":"2028-09-09"}]');
// Extraer el objeto de la primera posición del arreglo
let fecha = fechas[0];
// Convertir endGP a un objeto Date
let endGPDate = new Date(fecha.endGP);
let endGPTimestamp = endGPDate.getTime();
// Agregar perTot años a endGPDate
endGPDate.setFullYear(endGPDate.getFullYear() + perTot);
// Convertir endGPDate de nuevo a una cadena en formato YYYY-MM-DD
let endPayNewDate = endGPDate.toISOString().split('T')[0];
// Actualizar endPay en el objeto fecha
fecha.endPay = endPayNewDate;
// Convertir el objeto fecha de nuevo a JSON si es necesario
fechas = JSON.stringify(fechas);
// Mostrar fechas en showMe
const showMe = document.getElementById('showMe');
showMe.innerHTML = fechas;
// Definir unitPer (por ejemplo, mensual)
const unitPer = 30 * 86400; // per es mensual en este caso
// Calcular el número total de segundos en perTot años
const totalSeconds = perTot * 365 * 86400;
// Calcular el número de pagos
const numPagos = Math.floor(totalSeconds / unitPer);
// Generar las fechas de pago
let dataPagos = [];
let currentDate = new Date(fecha.endGP);
// Sumar el primer periodo para el inicio de los pagos
currentDate.setSeconds(currentDate.getSeconds() + unitPer);
for (let i = 0; i < numPagos; i++) {
dataPagos.push(currentDate.toISOString().split('T')[0]);
currentDate.setSeconds(currentDate.getSeconds() + unitPer);
}
// Ajustar endPay para que sea la fecha del último pago
fecha.endPay = dataPagos[dataPagos.length - 1];
// Mostrar dataPagos en showMe1
const showMe1 = document.getElementById('showMe1');
...