2017-10-16 142 views
1

使用tz()功能:时刻,时区格式不从<a href="https://momentjs.com/timezone/" rel="nofollow noreferrer">moment-timezone</a>如下返回预期的结果

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

这个问题有什么问题? Google将这个主题搜索了几个小时,上面的内容似乎是正确的方法。但我没有得到预期的结果。如果任何人都可以引导我走向正确的方向,或者解释downvote会更有帮助。 – sbkl

+0

'moment.tz('2017-10-15 13:53:43','Asia/Hong_Kong')'创建一个日期/时间,对应** 1:53 PM在香港**。 'format'方法只是打印这个相同的值,所以目前还不清楚为什么你期望9:53 PM作为输出。 – 2017-10-17 11:06:31

+0

您是否也可以编辑问题并添加使用'fromNow()'的代码,以及输入和期望与实际输出的示例?我不清楚什么*“使用初始时间戳并忽略应用的时区”*的意思。 – 2017-10-17 11:12:24

回答

1

当你这样做:

moment.tz('2017-10-15 13:53:43','Asia/Hong_Kong'); 

你正在创建的日期/时间对应于10月15日 2017年,在下午1时53分在香港 - 这,反过来,对应到2017-10-15T05:53:43Z5:53 AM,UTC)。

当调用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。但​​(1:53 PM在香港)与2017-10-15T05:53:43Z(UTC中的5:53)完全相同。这就是为什么fromNow(),当前时间为13:54 UTC,返回8小时。

如果你想的日期/时间对应于下午1时53分在UTC,你应该使用utc()功能:

// October 15th 2017, 1:53 PM in UTC 
moment.utc('2017-10-15 13:53:43'); 

现在,当当前时间是13:54 UTCfromNow()将返回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):

+0

感谢您的解答和解释! – sbkl

+0

@sbkl不客气,很高兴帮助! – 2017-10-17 22:58:01

相关问题