tengo lo siguiente
var my_date = '2021-09-27'; my_date = new Date(my_date); var new_date = new Date(); for(var i=0; i<10; i++) { new_date.setDate(my_date.getDate() + i); var this_date = new_date.toISOString(); console.log(this_date); }esperaba que saliera
2021-09-27T19:21:26.361Z 2021-09-28T19:21:26.361Z 2021-09-29T19:21:26.361Z 2021-09-30T19:21:26.361Z 2021-10-01T19:21:26.361Z 2021-10-02T19:21:26.361Z 2021-10-03T19:21:26.361Z 2021-10-04T19:21:26.361Z 2021-10-05T19:21:26.361Z 2021-10-06T19:21:26.361Zpero por alguna razón sale
2021-10-27T19:21:26.361Z 2021-10-28T19:21:26.361Z 2021-10-29T19:21:26.361Z 2021-10-30T19:21:26.361Z 2021-10-31T19:21:26.361Z 2021-11-01T19:21:26.361Z 2021-12-03T19:21:26.361Z 2022-01-03T19:21:26.361Z 2022-02-04T19:21:26.361Z 2022-03-08T19:21:26.361ZComo puede ver, comienza en octubre, no en septiembre, y luego, cuando llega el 31, comienza a saltar meses.
¿Por qué este script se comporta así?
Todos los ejemplos que he encontrado en línea parecen sugerir que esto funcionaría.
Gracias
Debido a que setDate solo cambia los días, por lo que cuando crea una new Date() , tiene el mes actual. Tienes que copiar la fecha original para que esto funcione correctamente.
Aquí está la solución:
var my_date = '2021-09-27'; my_date = new Date(my_date); for(var i=0; i<10; i++) { // clone date var new_date = new Date(my_date.getTime()) new_date.setDate(my_date.getDate() + i); var this_date = new_date.toISOString(); console.log(this_date); }