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 您感兴趣的时区的正确时间戳。
我将 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 您感兴趣的时区的正确时间戳。