将月份日期设置为31时出错

时间:2017-11-15 09:35:15

标签: javascript date

将日期设置为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)中的日期偏移。对于月初的情况,预期会出现这种情况。 (我们希望回到上个月并显示日期)。但是在这个月的最后一个日期的情况下,我们得到了错误的输出。他们为什么指向同一个日期?

1 个答案:

答案 0 :(得分:3)

假设您今天(11月15日)运行了此程序,则new Date()会返回一个Date对象,其中月份设置为11月。因此,拨打setDate(31)会导致date overflowing到12月1日(因为11月只有30天)。然后你打电话给setMonth(9),所以最后的结果对应于10月1日。

显然,您可以通过切换方法调用的顺序来避免这种情况。  但为了完全避免这种排序问题,我建议使用Date(year, month, date, ...)构造函数(这也避免了改变值类型,这通常被认为是一件好事)。