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 的科学计数法,除以毫秒差就是小时
我知道这是一个以前可能已经回答过的基本问题,但我一直在为这个问题摸不着头脑。所以这里是:
我想获取设定日期和当前时间之间的小时数。
我尝试了以下操作(这是在 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 的科学计数法,除以毫秒差就是小时