首页 > 解决方案 > JS 日期 API:两个日期之间的差异(以小时为单位)——当前日期的奇怪行为

问题描述

我知道这是一个以前可能已经回答过的基本问题,但我一直在为这个问题摸不着头脑。所以这里是:

我想获取设定日期和当前时间之间的小时数。

我尝试了以下操作(这是在 2018/05/23 21:35 UTC-4:00 完成的):

(new Date(2018, 05, 24).getTime() - new Date(2018,05,23).getTime())/(3600*1000) // 24

(new Date(2018, 05, 24).getTime() - new Date().getTime())/(3600*1000) // 746.4949...

奇怪的是,从当前时间中减去明天会得到 746 小时。期望我会得到〜2.4小时。我还尝试了以下变体:

// Straight up dates

(new Date(2018, 05, 24) - new Date(2018,05,23))/(3600*1000) // 24

(new Date(2018, 05, 24) - new Date())/(3600*1000) // 746.4949...

// Using valueOf

(new Date(2018, 05, 24).valueOf() - new Date(2018,05,23).valueOf())/(3600*1000) // 24

(new Date(2018, 05, 24).valueOf() - new Date().valueOf())/(3600*1000) // 746.4949...

// Using Date.now()

(new Date(2018, 05, 24).valueOf() - new Date().now())/(3600*1000) // 746.4949...

知道为什么这是一个问题,以及如何解决它?

非常感谢!

标签: javascriptdatedatediff

解决方案


Javascript 日期中的月份数字是从零开始的new Date(2018, 05, 24),2018 年 6 月 24 日也是如此,而不是 2018 年 5 月 24 日。从月份数字中减去 1 以获得您期望的结果。

console.log((new Date(2018, 4, 24).getTime() - new Date().getTime())/(3600*1000))

这会打印2.14出我在 5 月 23 日 21:50 UTC-04:00 运行它的时间。


推荐阅读