moment.js 是否需要在 UTC 转换中手动解析 DST?

Does DST need to be manually parsed in UTC conversions with moment.js?

我将 moment-timezone 的时间定义为希腊的 2015-06-05 10:00(UTC+2,DST = UTC+3)。然后我将它存储在 UTC 中以备后用。

据我所知,当我使用 .local 取回本地日期时,它被转换为 UTC+2,而忽略了它们现在处于 DST(夏令时)并且应该是 UTC+3。

你可以在这里看到:

var moment = require('moment-timezone'),
    myTime = moment.tz('2015-06-05 10:00', 'Europe/Athens')

myTime.format()
// '2015-06-05T10:00:00+03:00'
// OK, UTC+3

myTime.utc().format()
// '2015-06-05T07:00:00+00:00'
// OK, time changed to 7:00

myTime.local().format()
// '2015-06-05T09:00:00+02:00'
// ??? Why doesn't it take on account DST?

myTime.utc().local().format()
// '2015-06-05T09:00:00+02:00'
// Should it give back the initial value? It does not.

根据文档,我不清楚是否考虑夏令时。我错过了什么吗?您对此有何看法?

一些解释:

myTime = moment.tz('2015-06-05 10:00', 'Europe/Athens')

这将创建一个附加了时区信息的 moment 对象。

myTime.format()

这将使用该时区进行格式化。

myTime.utc().format()

这通过删除时区信息将 myTime 转换为 UTC。 这是一个破坏性操作,它改变了myTime对象。所以时区信息丢失了。类似于:

myTime.utc();
myTime.format();

继续:

myTime.local().format()

这将禁用 myTime"is UTC" 标志,这意味着格式化时它将根据您自己的本地时区进行格式化(再次,这改变了myTime).

myTime.tz('Europe/Athens').format()

通过将时区信息添加回 myTime 对象, 将 return 您感兴趣的时区的正确时间戳。