从时刻时区使用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'
我在这里做错了什么?
当你这样做时:
moment.tz('2017-10-15 13:53:43','Asia/Hong_Kong');
您正在创建一个日期/时间,该日期/时间对应于香港2017年10月15日下午1点53分的第天,而这又对应于2017-10-15T05:53:43Z
(UTC中的5:53 AM)。
当您调用format()
函数时:
moment.tz('2017-10-15 13:53:43','Asia/Hong_Kong').format();
它返回:
2017-10-15T13:53:43+08:00
+08:00
部分只是UTC偏移量-它只是告诉香港比UTC提前8小时。但2017-10-15T13:53:43+08:00
(香港下午1点53分)与2017-10-15T05:53:43Z
(UTC上午5点53分)完全相同。这就是为什么当当前时间为13:54 UTC时,fromNow()
会返回8小时。
如果您想要的日期/时间对应于UTC的下午1:53,则应使用utc()
函数:
// October 15th 2017, 1:53 PM in UTC
moment.utc('2017-10-15 13:53:43');
现在,当当前时间为13:54UTC时,fromNow()
将返回1分钟(因为日期/时间表示UTC中的1:53 PM)。
要将其转换为香港时区,只需使用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分UTC转换为香港时区(导致晚上9点53分):