日期计算错误

我有以下计算:

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

上一篇: Date Calculation Error

下一篇: Convert ISO date string to Date Object without considering timezone