【问题标题】:What's the best way to calculate date difference in Javascript在Javascript中计算日期差异的最佳方法是什么
【发布时间】:2008-11-29 11:04:33
【问题描述】:

我在 Javascript 中做一个函数,比如 VisualBasic DateDiff。

您给出两个日期和返回时间间隔(秒、分钟、天等...)

DateDiff(ByVal Interval As Microsoft.VisualBasic.DateInterval, _
  ByVal Date1 As Date, ByVal Date2 As Date) as Long

那么计算 Javascript 日期差异的最佳方法是什么?

【问题讨论】:

标签: javascript


【解决方案1】:

像这样使用Date object

function DateDiff(var /*Date*/ date1, var /*Date*/ date2) {
    return date1.getTime() - date2.getTime();
}

这将返回两个日期之间的毫秒数差异。将其转换为秒、分钟、小时等应该不会太难。

【讨论】:

  • 您不需要使用getTime。如果你只是做return date1 - date2;,结果是一样的。 (这不是特定于实现的事情,它在规范中,虽然有点间接)。
  • 我建议使用return date2.getTime() - date1.getTime();,这样日期的顺序就符合预期(否则将返回负数)。
  • 这个答案被接受,但很遗憾,这是错误的。试试代码new Date(new Date()-new Date());
  • @PéterVarga 为什么要将它包装在另一个new Date() 中?如果您描述 OP 感兴趣的结果是 0,而不是 new Date(0);
  • Shouldn't be too difficult。嗯,真的吗?月/年计数很困难(如果可能的话)我们应该使用whenwhere 信息来计算夏令时、闰年等。
【解决方案2】:

如果你关注这个tutorial,一种方法是使用:

Date.getTime()

您将找到完整的javascript function here,并附有日期验证。

话虽如此,正如Rafi B. 5 年后评论的那样,“Get difference between 2 dates in javascript?”更准确。

var _MS_PER_DAY = 1000 * 60 * 60 * 24;

// a and b are javascript Date objects
function dateDiffInDays(a, b) {
  // Discard the time and time-zone information.
  var utc1 = Date.UTC(a.getFullYear(), a.getMonth(), a.getDate());
  var utc2 = Date.UTC(b.getFullYear(), b.getMonth(), b.getDate());

  return Math.floor((utc2 - utc1) / _MS_PER_DAY);
}

【讨论】:

  • 如果您在同一天将下午 2 点到 11.59 点,则给出错误的时间。不是给 10 个小时,而是给 10:59。可以看看吗?
  • @jewelhuq 8 年后,我需要更多细节。你能问一个单独的问题吗?
  • var start = new Date("2016-12-24 14:00"); var end = new Date("2016-12-24 23:59"); var diffMs = (end.getTime() - start.getTime()); // 现在和圣诞节之间的毫秒数 var diffDays = Math.round(diffMs / 86400000); // 天 var diffHrs = Math.round((diffMs % 86400000) / 3600000); // 小时 ar diffMins = Math.round(((diffMs % 86400000) % 3600000) / 60000); // 分钟 console.log(diffHrs);它在 10:59 小时返回,它可以正常工作到 23:00。发生了什么问题。
  • @jewelhuq 注意:链接 javascript.internet.com 不再有效。我已经恢复了它。我还指出了一个更准确的解决方案。最后,关于您的最后一条评论,最好在一个新问题中解决。
  • 哪种方案更准确?
猜你喜欢
  • 2020-11-13
  • 2020-09-26
  • 1970-01-01
  • 2015-01-13
  • 1970-01-01
  • 1970-01-01
  • 2010-09-13
  • 2010-10-29
  • 2015-04-22
相关资源
最近更新 更多