【问题标题】:How to get the hours difference between two date objects? [duplicate]如何获得两个日期对象之间的小时差? [复制]
【发布时间】:2013-10-14 01:26:59
【问题描述】:

我有两个 Date 对象,我想计算小时差。

如果小时差小于 18 小时,我想将日期对象推送到数组中。

Javascript / jQuery,没关系;最有效的方法。

【问题讨论】:

标签: javascript jquery date object


【解决方案1】:

最简单的方法是直接将日期对象彼此相减。

例如:

var hours = Math.abs(date1 - date2) / 36e5;

减法以毫秒为单位返回两个日期之间的差异。 36e560*60*1000 的科学记数法,除以将毫秒差转换为小时。

【讨论】:

  • 我的工程师更愿意看到3.6e6 (normalized scientific notation) 而不是36e5。然而,图书读者更喜欢360000
  • 各有所长。
  • @Blazemonger 360 000?我更喜欢 3 600 000 ;)
  • 好方法,尽管由于大量处理不准确,我得到 2.0001191666666664。我建议将结果提供给 Math.floor,例如 var hours = Math.floor(Math.abs(date1 - date2) / 36e5);
  • 为了使代码对普通开发人员更具可读性,我会坚持使用 60*60*1000(或使用 3600000 并带有注释)。 36e5 或 3.6e6 假定开发人员知道科学记数法,但情况并非总是如此。
【解决方案2】:

尝试使用getTime (mdn doc):

var diff = Math.abs(date1.getTime() - date2.getTime()) / 3600000;
if (diff < 18) { /* do something */ }

使用Math.abs() 我们不知道哪个日期最小。这段代码可能更相关:

var diff = (date1 - date2) / 3600000;
if (diff < 18) { array.push(date1); }

【讨论】:

    【解决方案3】:

    使用通过在日期对象上调用valueOf 获得的时间戳:

    var diff = date2.valueOf() - date1.valueOf();
    var diffInHours = diff/1000/60/60; // Convert milliseconds to hours
    

    【讨论】:

      猜你喜欢
      • 2020-02-08
      • 1970-01-01
      • 2014-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-13
      相关资源
      最近更新 更多