检查以下代码示例:
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
或X seconds/minutes/hours... ago
使用UTC以获得Date
而不会产生无效结果/ moment
根据日期的偏移量翻译日期时间。
我在这里做错了什么?
答案 0 :(得分:1)
我不确定为什么你会认为应该忽略源偏移。它们与转换为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
结果不可能为零,因为无论你怎么看,两个时间戳代表两个不同的时刻,相隔两个小时。
由于当前的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
函数的行为。