【问题标题】:Date Calculation Error日期计算错误
【发布时间】:2018-08-10 10:49:48
【问题描述】:

我有以下计算:

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月02日(今天)

2018 年 3 月 1 日星期四 12:03:34 GMT+0530(印度标准时间)**** 2018 年 3 月 1 日

2018 年 1 月 30 日星期二 12:03:34 GMT+0530(印度标准时间)**** 2018 年 1 月 30 日

2018 年 3 月 1 日星期四 12:03:34 GMT+0530(印度标准时间)**** 2018 年 3 月 1 日

2018 年 1 月 29 日星期一 12:03:34 GMT+0530(印度标准时间)**** 2018 年 1 月 29 日

--2018年3月1日(昨天)

2018 年 2 月 28 日星期三 12:12:32 GMT+0530(印度标准时间)**** 2018 年 2 月 28 日

2018 年 2 月 26 日星期一 12:12:32 GMT+0530(印度标准时间)**** 而不是 2018 年 1 月 29 日

2018 年 3 月 28 日星期三 12:12:32 GMT+0530(印度标准时间)**** 2018 年 2 月 28 日

2018 年 2 月 25 日星期日 12:12:32 GMT+0530(印度标准时间)**** 2018 年 1 月 28 日

【问题讨论】:

  • 为什么 C# 被标记?
  • 不需要。因为我使用的是 C#,所以我刚刚添加了。无论如何我都会删除它..谢谢
  • vDueFromDatevDueToDatevOverDueToDate的初始化值是多少? getDatesetDate 只获取和设置月份中的某一天,而不是整个日期!
  • setDate 的结果取决于变量的初始值。那么,您能否提供vDueFromDatevDueToDatevOverDueToDate 的初始值?

标签: javascript


【解决方案1】:

嗯....看。从documentation我们现在关于.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 是 2 月 26 日

vDueToDate.setDate(vCurrDate.getDate());

如上所述,vCurrDate.getDate() 现在是28,因此我们将 vDueToDate 设置为当月 28 日,即 3 月 28 日。

vOverDueToDate.setDate(vCurrDate.getDate() - 31);

在这种情况下,您尝试将日期设置为当月的 -3,因此,如上所述,这是 2 月 25 日

【讨论】:

  • 那么怎么做才能得到这个结果 /*28-Feb-2018*/ /*26-jan-2018*/ /*28-Feb-2018*/ /*25-jan-2018 /* 在这个日期
  • 据我了解,您的 vDueFromDate, vDueToDate and vOverDuetToDate 的值仅取决于 vCurrDate。因此,对于 vCurrDate,您可以使用 .setDate(...) 对于其他,假设我们可以使用 vDueFromDate=new Date(vCurrDate.getTime()-30*24*3600000)
  • 另一种方案是使用moment.js进行数据计算
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多