将日期设置为31时,我们遇到了此问题。
function getTodayMidnight() {
var date = new Date();
date.setHours(0);
date.setMinutes(0);
date.setSeconds(1);
date.setMilliseconds(0);
return date;
}
function getDates() {
var octStartDate = getTodayMidnight();
octStartDate.setDate(1);
octStartDate.setMonth(9);
var octEndDate = getTodayMidnight();
octEndDate.setDate(31);
octEndDate.setMonth(9);
console.log(octStartDate);
console.log(octEndDate);
}
getDates();

我考虑了我的时区(+530, 330 mins)
中的日期偏移。对于月初的情况,预期会出现这种情况。 (我们希望回到上个月并显示日期)。但是在这个月的最后一个日期的情况下,我们得到了错误的输出。他们为什么指向同一个日期?
答案 0 :(得分:3)
假设您今天(11月15日)运行了此程序,则new Date()
会返回一个Date
对象,其中月份设置为11月。因此,拨打setDate(31)
会导致date overflowing到12月1日(因为11月只有30天)。然后你打电话给setMonth(9)
,所以最后的结果对应于10月1日。
显然,您可以通过切换方法调用的顺序来避免这种情况。
但为了完全避免这种排序问题,我建议使用Date(year, month, date, ...)
构造函数(这也避免了改变值类型,这通常被认为是一件好事)。