Estoy tratando de ejecutar un bucle for que tiene que repetirse 8 veces. En cada iteración, quiero que el ciclo incremente el valor en +1 hora.
El resultado final debe estar en este formato de hora:
horario de apertura: 08:00, 09:00, 10:00, 11:00, 12:00, 13:00, 14:00, 15:00, 16:00
En este caso, la timediff mencionada en el for...loop tiene el valor de 8.
var minutesToAdd = 60; var currentDate = new Date("2022-04-10 08:00:00"); var futureDate = new Date(currentDate.getTime() + minutesToAdd * 120000).toLocaleTimeString(); for (let i = 0; i < timeDiff; i++) { console.log(futureDate, 'futureeee date'); }Su código nunca actualiza futureDate en el ciclo. Además, cuando espera imprimir 08:00 en el ejemplo, debe imprimir la fecha currentDate cuando aún no se han agregado minutos.
También le sugiero que use la función nativa setMinutes y getMinutes para agregar una cantidad de minutos a un objeto de fecha.
Dice que timeDiff tiene un valor de 8, pero luego dice que quiere 9 salidas (8:00 ... 16:00), por lo que necesitará una iteración adicional.
Finalmente, para obtener el formato de salida hh:mm, existen varias soluciones. Una es elegir una configuración regional que use un formato que se acerque a lo que necesita y expresar que desea el formato corto (sin segundos):
let timeDiff = 9; // One more to also output 16:00 let minutesToAdd = 60; let currentDate = new Date("2022-04-10 08:00:00"); for (let i = 0; i < timeDiff; i++) { console.log(currentDate.toLocaleTimeString("en-SE", { timeStyle: "short" })); currentDate.setMinutes(currentDate.getMinutes() + minutesToAdd); }Luego puede usar un ciclo for simple para iterar desde 0 hasta timeDiff incluido, incrementando cada iteración en 1 .
for (let hours = 0; hours <= timeDiff; hours += 1) { // ... } En lugar de una fecha de inicio, comenzaremos con una marca de tiempo Date.parse("2022-04-10 08:00:00") . Esto nos permite agregar la hora del bucle a la marca de tiempo y crear una nueva fecha.
const date = new Date(currentTimestamp + hours*HOURS);Para mostrar solo el tiempo que me he tomado la libertad de usar la solución provista por la respuesta de trincot .
const MILLISECOND = 1 , MILLISECONDS = MILLISECOND; const SECOND = 1000*MILLISECONDS, SECONDS = SECOND ; const MINUTE = 60*SECONDS , MINUTES = MINUTE ; const HOUR = 60*MINUTES , HOURS = HOUR ; const timeDiff = 8; var currentTimestamp = Date.parse("2022-04-10 08:00:00"); for (let hours = 0; hours <= timeDiff; hours += 1) { const date = new Date(currentTimestamp + hours*HOURS); console.log(date.toLocaleString(undefined, { timeStyle: "short" })); }