【问题标题】:Incorrect Javascript Day When Added?添加时不正确的 Javascript 日期?
【发布时间】:2016-06-27 23:09:34
【问题描述】:

我有一个 javascript 函数,它接受一个数字 X 和一个日期,并返回一个新的 Date,即距离 X 天数:

function addDays(theDate, numDaysToAdd) {
    var newDate = new Date();
    return new Date(newDate.setDate(theDate.getDate() + numDaysToAdd));
}

我通过它的一天是Sat <strong><em>Jul</em></strong> 02 2016 16:03:06 GMT-0700 (Pacific Daylight Time) 和一个数字7,但我得到的结果是Thu <strong><em>Jun</em></strong> 09 2016 16:05:32 GMT-0700 (Pacific Daylight Time)。为什么它给了我正确的日期但错误的月份?

【问题讨论】:

    标签: javascript date


    【解决方案1】:

    问题是newDate 总是从当前日期(new Date())创建。换句话说,如果此函数在六月执行,它将产生六月的日期,然后尝试将一个月中的某一天设置为与输入日期的偏移量。

    您需要将newDate 构造为theDate 的副本:

    function addDays(theDate, numDaysToAdd) {
        var newDate = new Date(theDate);
        newDate.setDate(theDate.getDate() + numDaysToAdd);
        return newDate;
    }
    
    var d = new Date('Sat Jul 02 2016 16:03:06 GMT-0700 (Pacific Daylight Time)');
    console.log(addDays(d, 7).toString());

    【讨论】:

      【解决方案2】:

      您可以将毫秒数添加到给定日期,它将生成正确的日期。

      getTime()epoch 返回毫秒数。

      偏移量 = numDaysToAdd * 24 * 60 * 60 * 1000;

      24:一天中的几个小时

      60:一小时内的分钟数

      60:一分钟内的秒数

      1000:以毫秒为单位

      Date 构造函数需要从纪元开始的毫秒数

      function addDays(theDate, numDaysToAdd) {
          var start = theDate.getTime();
          var offset = numDaysToAdd * 24 * 60 * 60 * 1000;
          return new Date(start + offset);
      }
      
      var today = new Date();
      console.log(today, addDays(today, 10));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-01-24
        • 2014-12-03
        • 1970-01-01
        • 2020-09-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多