使用moment-timezone中的tz()
功能,如下所示:
moment.tz('2017-10-15 13:53:43','Asia/Hong_Kong').format()
//returns '2017-10-15T13:53:43+08:00'
moment.tz('2017-10-15 13:53:43','Asia/Hong_Kong').format('h:m A')
//I expect to return '9:53 PM' but it returns '1:53 PM'
最终,我想应用fromNow()
函数来格式化结果。但是当我应用它时,它使用初始时间戳并忽略应用的时区。
moment.tz('2017-10-15 13:53:43','Asia/Hong_Kong').fromNow()
//I expect to return '1 min ago' when actual time is 13:54 UTC (21:54 in HK) but it returns '8 hours ago'
我在这里做错了什么?
答案 0 :(得分:2)
当你这样做时:
moment.tz('2017-10-15 13:53:43','Asia/Hong_Kong');
您创建了一个日期/时间,对应于 2017年10月15日 th ,香港时间下午1点53分 - 这反过来对应到2017-10-15T05:53:43Z
( UTC上午5:53 )。
调用format()
函数时:
moment.tz('2017-10-15 13:53:43','Asia/Hong_Kong').format();
它返回:
2017-10-15T13:53:43 + 08:00
+08:00
部分只是UTC offset - 它只是告诉Hong Kong is 8 hours ahead UTC。但2017-10-15T13:53:43+08:00
(香港时间下午1:53 )与2017-10-15T05:53:43Z
完全相同(上午5:53 UTC )。这就是为什么fromNow()
,当前时间 13:54 UTC 时,会返回8小时。
如果您想要与UTC中 1:53 PM 对应的日期/时间,则应使用utc()
函数:
// October 15th 2017, 1:53 PM in UTC
moment.utc('2017-10-15 13:53:43');
现在,当当前时间 13:54 UTC 时,fromNow()
将返回1分钟(因为日期/时间代表 UTC下午1:53 )。
要将此转换为香港时区,只需使用tz()
功能:
// convert 1:53 PM UTC to Hong Kong timezone (9:53 PM)
moment.utc('2017-10-15 13:53:43').tz('Asia/Hong_Kong').format('h:m A');
这会将 1:53 PM UTC 转换为香港时区(导致 9:53 PM ):