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

标签 javascript html 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.fromNowmoment.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/

相关文章:

javascript - webkit 重定向到包含 javascript 内容的空白页面

javascript - 无法获取同一参数的多个实例的问题列表

javascript - 一切正常时,带有 jQ​​uery 的 Ajax 返回错误

javascript - 如果想实现:Parallel between loops,多个异步操作在循环中串行运行,代码该怎么写?

c# - 获取知道周数的一周的第一天和最后一天的日期

java - 获取创建文件的日期/时间

html - CSS Responsive - 更改 div 的顺序

html - 如何让 CSS 背景图像显示在 Word 打开的 HTML 文件中?

php - super 奇怪的 HTML 搞砸了

mysql - 检查日期范围时最快的结果