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

Why moment.utc(...).diff(moment.utc(...)) gets affected by source date offsets

本文关键字:moment 日期 偏移量 影响 utc diff ucc 为什么      更新时间:2023-09-26

检查以下代码示例:

moment.utc("2014-10-19T09:27:57.9417128+00:00")
      .diff(moment.utc("2014-10-19T09:27:57.9417128+02:00"))

我希望0,因为我将两个日期都转换为UTC,但结果是7200000

事实上,由于Date/moment基于日期偏移量转换日期时间,我希望让moment.fromNowmoment.from与UTC一起工作,以获得没有无效结果的X seconds/minutes/hours... ago

我在这里做错了什么?

我不知道为什么你会认为源偏移量应该被忽略。它们与转换为UTC特别相关,因为它们实际上代表UTC和所代表的时间之间的差异。

在第一个时间戳中,+00:00表示时间已经在UTC。在第二个时间戳中,+02:00表示时间比UTC提前两个小时。CCD_ 10。

换句话说:

    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解释输入字符串。两者都不会改变CCD_ 12函数的行为。