JS 日期 API:两个日期之间的小时差 – 当前日期的奇怪行为

JS Date API: Diff between two dates in hours – Odd behaviour with current Date

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

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

我尝试了以下操作(这是在 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.4h。我还尝试了以下变体:

// 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...

知道为什么会出现这个问题,以及如何解决它吗?

非常感谢!

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))

当我在 5 月 23 日 21:50 UTC-04:00 运行 时,它打印了大约 2.14

MDN

所述

Note: The argument month is 0-based. This means that January = 0 and December = 11.

获取两个日期的时差的最简单方法,(ref)

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

减法returns两个日期之间的差值(以毫秒为单位)。 36e5 是 60*60*1000 的科学计数法,除以毫秒差就是小时