为什么moment.utc(...)。diff(moment.utc(...))受到源日期偏移的影响

时间:2014-10-19 15:50:39

标签: javascript html5 date momentjs

检查以下代码示例:

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.fromX seconds/minutes/hours... ago使用UTC以获得Date而不会产生无效结果/ moment根据日期的偏移量翻译日期时间。

我在这里做错了什么?

1 个答案:

答案 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函数的行为。