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

IT技术 javascript
2021-01-17 03:25:33

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

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

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

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

2个回答

像这样使用Date 对象

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

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

我建议使用return date2.getTime() - date1.getTime();,以便日期的顺序符合预期(否则将返回负数)。
2021-03-23 03:25:33
您不需要使用getTime. 如果你只是这样做return date1 - date2;,结果是一样的。(这不是特定于实现的事情,它在规范中,尽管有些间接)。
2021-03-25 03:25:33
这个答案被接受,但不幸的是是错误的。试试代码new Date(new Date()-new Date());
2021-03-31 03:25:33
@PéterVarga 你为什么把它包在另一个里new Date()如果您描述 OP 感兴趣的结果是0,而不是new Date(0);
2021-04-08 03:25:33
Shouldn't be too difficult. 嗯,真的吗?月/年计数很困难(如果可能的话)我们应该使用whenwhere信息来计算 dst、闰年等。
2021-04-08 03:25:33

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

Date.getTime()

您将在此处找到完整的javascript 函数,并带有日期验证。

话虽如此,正如Rafi B. 5 年后评论的那样,“在 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);
}
@jewelhuq 注意:链接 javascript.internet.com 不再有效。我已经恢复了。我还指出了一个更准确的解决方案。最后,关于你最后的评论,最好在一个新问题中解决。
2021-03-22 03:25:33
哪个是更准确的解决方案?
2021-03-25 03:25:33
@jewelhuq 8 年后,我需要更多细节。你能问一个单独的问题吗?
2021-03-29 03:25:33
如果您在同一天将下午 2 点放在晚上 11.59 点,那就是错误的时间。不是给 10 小时,而是给 10:59。你能查一下吗?
2021-03-30 03:25:33
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。出了什么问题。
2021-04-04 03:25:33