【问题标题】:Date is incrementing by a month after daylight saving is over in Javascript在Javascript中夏令时结束后,日期增加一个月
【发布时间】:2015-09-28 11:02:22
【问题描述】:

我正在尝试将日期添加到数组中,一切正常,日期增加一,但在 10 月 1 日之后,javascript 将其增加一个月。

var currentDate = new Date();
var startDate = new Date();
 for (var i = 0; i <= 4; i++) {
      currentDate.setDate(startDate.getDate() + i);
console.log (currentDate);
    }

输出:

  • 2015 年 9 月 28 日星期一 11:58:23 GMT+0100(GMT 夏令时间)
  • 2015 年 9 月 29 日星期二 11:58:23 GMT+0100(GMT 夏令时间)
  • 2015 年 9 月 30 日星期三 11:58:23 GMT+0100(GMT 夏令时间)
  • 2015 年 10 月 1 日星期四 11:58:23 GMT+0100(GMT 夏令时间)
  • 2015 年 11 月 1 日星期日 11:58:23 GMT+0000(GMT 标准时间)

【问题讨论】:

    标签: javascript


    【解决方案1】:

    它与夏令时无关,它与你对 currentDate 所做的事情有关

    • i == 0。CurrentDate.setDate = 28 + 0 = 28,日期为 28/Sep
    • i == 1. CurrentDate.setDate = 28 + 1 = 29,日期为 29/Sep
    • i == 2. CurrentDate.setDate = 28 + 2 = 30,日期为 30/Sep
    • i == 3. CurrentDate.setDate = 28 + 3 = 31,Date 是 31/Sep,变成 01/Oct ... 现在注意 CurrentDate 月份是 OCTOBER
    • i == 4. CurrentDate.setDate = 28 + 4 = 32,日期是 32/Oct,变为 11 月 1 日

    你可以实现你想要的,而无需担心一个月有多少天

    var currentDate = new Date();
    var startDate = new Date();
     for (var i = 0; i <= 4; i++) {
          currentDate.setDate(currentDate.getDate() + 1); // <<<===
          //                  ^^^^^^^^^^^             ^
          console.log (currentDate);
     }
    

    【讨论】:

    • 我打算在我的回答中尝试解释这一点,但想不出一个简洁的方法来做到这一点。 +1 解释。
    【解决方案2】:

    尝试不使用 startDate:

    var currentDate = new Date();
    
    for (var i = 0; i <= 4; i++) {
        currentDate.setDate(currentDate.getDate() + 1); // Notice + 1 not + i
        console.log(currentDate);
    }
    

    【讨论】:

      【解决方案3】:

      我想我发现了问题:

      首先,您需要了解setDate 的实际作用。它设置月份的日期。因此,让我们遍历循环并跟踪 Date 对象:

      currentDate => {d: 28, m: 9}
      startDate => {d: 28, m: 9}
      currentDate.setDate(28 + 1)
      currentDate => {d: 29, m: 9}
      currentDate.setDate(28 + 2)
      currentDate => {d: 30, m: 9}
      currentDate.setDate(29 + 3)
      currentDate => {d: 1, m: 10} // month changed!!!
      currentDate.setDate(29 + 4)
      // month changed again since the old month
      // is still 10, not 9
      currentDate => {d: 1, m: 11}
      

      尝试使用 setTime()getTime() 或将日期操作完全委托给像 Moment.js 这样的库

      【讨论】:

        【解决方案4】:

        尝试使用 setTime() 以毫秒为单位添加天数,而不是 setDate() 来为日期添加天数。

        var currentDate = new Date();
        var startDate = new Date();
        for (var i = 0; i <= 4; i++) {
          currentDate.setTime(startDate.getTime() + (i*86400000));
          console.log(currentDate);
        }
        

        【讨论】:

          猜你喜欢
          • 2023-02-07
          • 2021-07-14
          • 1970-01-01
          • 2015-11-23
          • 2022-01-01
          • 2011-02-21
          • 2023-04-05
          • 1970-01-01
          相关资源
          最近更新 更多