【问题标题】:Calculate date difference in javascript在javascript中计算日期差异
【发布时间】:2015-01-13 10:08:15
【问题描述】:

我在下面写代码:

var _MS_PER_Day=24*60*60*1000;
var utc1 = Date.UTC(1900, 1, 1);
var utc2 = Date.UTC(2014,11,16);
var x = Math.ceil((utc2 - utc1) / _MS_PER_Day);
alert(x);

我想计算两个日期之间的日期差。实际的日期差是 41957,但运行我的代码后我得到 41956,少一个日期。我的代码有什么问题?

【问题讨论】:

  • 根据我的计算,差异是 41958。
  • @nnnn convertunits.com/dates/from/Jan+1,+1900/to/Nov+16,+20 我检查了超过 5 个网站,这只是 41957 天,我想我们还有 1 天。
  • 有趣:当我说“我的计算”时,我刚刚使用了 Excel (2010),它似乎错误地认为 1900 年是闰年。所以是的,41957 是正确的。

标签: javascript date utc


【解决方案1】:

我认为你可以使用http://momentjs.com/ 它会给你最好的结果。

const a = new Date(YOUR_START_TIME),
      b = new Date()

let diff = moment([b.getFullYear(), b.getMonth(), b.getDate()])
  .diff(moment([a.getFullYear(), a.getMonth(), a.getDate()]), 'years', true)

【讨论】:

    【解决方案2】:

    您的代码正在计算 1900 年 2 月 1 日和 2014 年 12 月 16 日之间的差异 (41956 days)。 The value month should be between 0...11(其中 0 是一月)。更正月份数字以获得expected result

    var _MS_PER_Day = 1000 * 60 * 60 * 24;
    var utc1 = Date.UTC(1900, 0, 1); // Jan 01, 1900
    var utc2 = Date.UTC(2014, 10, 16); // Nov 16, 2014
    var x = Math.ceil((utc2 - utc1) / _MS_PER_Day);
    alert(x); // 41957
    

    【讨论】:

    • 1000 * 60 * 60 * 24 你用了两次。为什么不直接输入86400000864E5
    • @BenjaBoy 那你得到什么结果?
    • @BenjaBoy - 您问题中的代码与此相同,因为您使用了不同的月份。
    【解决方案3】:

    月份是从 0 到 11,将 0 视为一月。 您也可以使用 getTime 方法获取 UTC 时间戳(以毫秒为单位)。

    var _MS_PER_Day = 1000 * 60 * 60 * 24;
    var t1 = new Date(1900, 0, 1); // Jan 01, 1900
    var t2 = new Date(2014, 10, 16); // Nov 16, 2014
    var tdiff = Math.ceil((t2.getTime() - t1.getTime()) / _MS_PER_Day); // tdiff = 41957
    

    http://www.w3schools.com/jsref/jsref_gettime.asp

    【讨论】:

      【解决方案4】:

      这是上述代码的替代代码,将为您提供 41957。

      var date1 = new Date("1/1/1900");
      var date2 = new Date("11/16/2014");
      var timeDiff = Math.abs(date2.getTime() - date1.getTime());
      var diffDays = Math.ceil(timeDiff / (1000 * 3600 * 24)); 
      alert(diffDays);
      

      参考: Get difference between 2 dates in javascript?

      【讨论】:

      • 你的代码可以工作,但我没有彻底测试过。
      • 太棒了。我一直在用 math.round 做这件事,但它总是给我 -0 并且我的逻辑被打破了。有了这个逻辑,我就能解决我的问题。
      猜你喜欢
      • 2015-04-22
      • 1970-01-01
      • 2011-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-21
      • 1970-01-01
      相关资源
      最近更新 更多