我从以下代码中得到了一些奇怪的结果:
a = [];
a[0] = new Date();
console.log("1 Element Added: "+a.length + " - " + a.toString());
//"1 Element Added: 1 - Sun Jun 02 2019 12:13:35 GMT-0400 (Eastern Daylight Time)"
a.unshift(new Date(new Date(new Date().setDate(a[0].getDate() - 1))));
console.log("First Unshift: "+a.length + " - " + a.toString());
//"First Unshift: 2 - Sat Jun 01 2019 12:13:35 GMT-0400 (Eastern Daylight Time),Sun Jun 02 2019 12:13:35 GMT-0400 (Eastern Daylight Time)"
a.unshift(new Date(new Date(new Date().setDate(a[0].getDate() - 1))));
console.log("Second Unshift: "+a.length + " - " + a.toString());
//"Second Unshift: 3 - Fri May 31 2019 12:13:35 GMT-0400 (Eastern Daylight Time),Sat Jun 01 2019 12:13:35 GMT-0400 (Eastern Daylight Time),Sun Jun 02 2019 12:13:35 GMT-0400 (Eastern Daylight Time)"
a.unshift(new Date(new Date(new Date().setDate(a[0].getDate() - 1))));
console.log("Third Unshift: "+a.length + " - " + a.toString());
//"Third Unshift: 4 - Sun Jun 30 2019 12:13:35 GMT-0400 (Eastern Daylight Time),Fri May 31 2019 12:13:35 GMT-0400 (Eastern Daylight Time),Sat Jun 01 2019 12:13:35 GMT-0400 (Eastern Daylight Time),Sun Jun 02 2019 12:13:35 GMT-0400 (Eastern Daylight Time)"
相同的代码在第 1 次和第 2 次运行,但第 3 次运行给出了意想不到的结果 - 应该是 2019 年 5 月 30 日星期四,而不是 2019 年 6 月 30 日有人可以告诉我我在这里做错了什么吗?
提前致谢。
最佳答案
最里面的 new Date()
总是在六月创建一个 Date 实例。当您将日期设置为 30 时,您会将日期强制设置为 6 月 30 日,而不是 5 月 30 日。
调用 .setDate()
可以更改月份,但只有当日期是没有意义的东西时,要么更小(零或负)或更大(如 33)。由于 30 确实是 6 月的真实日期,因此月份不会改变。
关于Javascript 数组 unshift 新日期减去 1 天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56416866/