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');
 ...