在Javascript中计算日期差异的最佳方法是什么

Inf*_*tus 37 javascript

我在Javascript中执行函数,如VisualBasic DateDiff.

你给两个日期和返回的时间间隔(秒,分钟,天等...)

DateDiff(ByVal Interval As Microsoft.VisualBasic.DateInterval, _
  ByVal Date1 As Date, ByVal Date2 As Date) as Long
Run Code Online (Sandbox Code Playgroud)

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

ana*_*rex 55

像这样使用Date对象:

function DateDiff(var /*Date*/ date1, var /*Date*/ date2) {
    return date1.getTime() - date2.getTime();
}
Run Code Online (Sandbox Code Playgroud)

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

  • 你不需要使用`getTime`.如果你只是`return date1 - date2;`,结果是一样的.(这不是特定于实现的事情,它在规范中,尽管有点间接). (30认同)
  • 我建议使用`return date2.getTime() - date1.getTime();`所以日期的顺序是预期的(否则将返回一个负数). (3认同)
  • @PéterVarga为什么要把它包装在另一个`new Date()`中?如果你描述OP感兴趣的结果是'0`,而不是`new Date(0);` (2认同)
  • 「应该不会太难」。嗯,真的吗?月/年计数很困难(如果可能的话),我们应该使用“何时”和“何处”信息来计算夏令时、闰年等。 (2认同)

Von*_*onC 5

如果您遵循本教程,一种方法是使用:

Date.getTime()
Run Code Online (Sandbox Code Playgroud)

你会在这里找到一个完整的javascript函数,完成日期验证.

话虽如此,正如5年后Rafi B.评论的那样," 在javascript中获得2个日期之间的区别? "更准确.

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);
}
Run Code Online (Sandbox Code Playgroud)