检查以下代码示例:
moment.utc("2014-10-19T09:27:57.9417128+00:00")
.diff(moment.utc("2014-10-19T09:27:57.9417128+02:00"))
我期望 0
因为我将两个日期都转换为 UTC,但这给出了 7200000
结果。
事实上,我希望让 moment.fromNow
或 moment.from
与 UTC 配合使用,以获得 X 秒/分钟/小时...前
没有无效结果,因为 Date
/moment
根据日期偏移量转换日期时间。
我在这里做错了什么?
最佳答案
我不知道为什么你会认为源偏移应该被忽略。它们对于转换为 UTC 特别相关,因为它们实际上代表 UTC 和所表示的时间之间的差异。
在第一个时间戳中,+00:00
表示时间已经是 UTC。在第二个时间戳中,+02:00
表示时间比 UTC 早两个小时。 2 * 60 * 60 * 1000 = 7200000
。
换句话说:
2014-10-19T09:27:57.9417128+00:00 == 2014-10-19T09:27:57.9417128Z
- 2014-10-19T09:27:57.9417128+02:00 == 2014-10-19T07:27:57.9417128Z
=======================================================================
02:00:00
结果不可能为零,因为无论你怎么看,两个时间戳代表了相隔两个小时的两个不同时刻。
由于 moment 的 fromNow
函数已经可以使用当前 UTC 时间,并且您拥有带有偏移量的完整 ISO 时间戳,因此您可以直接使用它,无需任何转换。
moment("2014-10-19T09:27:57.9417128+02:00").fromNow()
您甚至不需要先转换为 UTC。你可以这样做:
moment.utc("2014-10-19T09:27:57.9417128+02:00").fromNow()
但是这些都会返回相同的结果,因为您已经提供了偏移量。仅当您不包含偏移量时,它们才会有所不同,在这种情况下,第一个示例将以本地时间解释输入字符串,而第二个示例将以 UTC 解释输入字符串。这两者都不会改变 fromNow
函数的行为。
关于javascript - 为什么 moment.utc(...).diff(moment.utc(...)) 受到源日期偏移量的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26452258/