时刻时区格式不返回预期结果



从时刻时区使用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分):

相关内容

  • 没有找到相关文章

最新更新