日期计算错误
我有以下计算:
vCurrDate = new Date();
vDueFromDate = new Date();
vDueToDate = new Date();
vOverDueToDate = new Date();
vCurrDate.setDate(vCurrDate.getDate() - 1);
vDueFromDate.setDate(vCurrDate.getDate() - 30);
vDueToDate.setDate(vCurrDate.getDate());
vOverDueToDate.setDate(vCurrDate.getDate() - 31);
2018年3月2日(今天),以上所有计算结果都正常。 但是,2018年3月1日,最后三次计算出错了。 以下显示上述两个日期的计算结果:
- 2018年3月2日(今日)
Thu Mar 01 2018 12:03:34 GMT + 0530(印度标准时间)**** 01-Mar-2018
星期二2018年1月30日12时03分34秒GMT + 0530(印度标准时间)**** 2018年1月30日
Thu Mar 01 2018 12:03:34 GMT + 0530(印度标准时间)**** 01-Mar-2018
Mon 1月29日2018 12:03:34 GMT + 0530(印度标准时间)**** 29-Jan-2018
- 2018年3月1日(昨天)
星期三2月28日2018 12:12:32 GMT + 0530(印度标准时间)**** 2018年2月28日
星期一2月26日2018 12:12:32 GMT + 0530(印度标准时间)****而不是29-Jan-2018
星期三Mar 28 2018 12:12:32 GMT + 0530(印度标准时间)**** 2018年2月28日
太阳2月25日2018 12:12:32 GMT + 0530(印度标准时间)**** 28-Jan-2018
嗯....看。 从我们现在关于.setDate(..)
文档开始:
如果dayValue在该月的日期值范围之外,则setDate()将相应地更新Date对象。 例如,如果为dayValue提供了0,则日期将设置为上个月的最后一天。
让我们来了解3月1日你的约会会发生什么。
vCurrDate.setDate(vCurrDate.getDate() - 1);
之后根据setDate规范将该vCurrDate分配到2月28日
vDueFromDate.setDate(vCurrDate.getDate() - 30);
至vDueFromDate,您将日期设置为当前日期的28-30
天或-2天。 0意味着前几个月的最后一天,因此-2是二月二十六日
vDueToDate.setDate(vCurrDate.getDate());
如上所述, vCurrDate.getDate()
现在是28
,因此我们将vDueToDate设置为当前月的第28天,即3月28日。
vOverDueToDate.setDate(vCurrDate.getDate() - 31);
在这种情况下,您尝试将日期设置为当前月份的-3,因此,如上所述,这是2月25日
链接地址: http://www.djcxy.com/p/46597.html下一篇: Convert ISO date string to Date Object without considering timezone