我有以下内容
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);
}
我期望它输出
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.361Z
但是由于某些原因它输出
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.361Z
正如你所看到的,它从10月开始,而不是9月,然后当它到达31日时,它开始跳跃月份。
为什么这个脚本的行为是这样的?
我在网上找到的所有例子似乎都表明这是可行的。
感谢因为setDate
只改变天数,所以当您创建new Date()
时,它包含当前月份。你必须复制原始日期,使其正常工作。
修复:
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);
}