我使用Moment.js在我的web应用程序中解析和格式化日期。作为JSON对象的一部分,我的后端服务器以UTC epoch (Unix偏移量)的毫秒数发送日期。
解析特定时区的日期很简单——只需在解析前将RFC 822时区标识符附加到字符串的末尾:
//响应根据时区不同而不同
Const m1 = moment('3/11/2012 13:00').utc()。格式(“MM / DD HH: MM”)
//问题解决,总是“03/11 17:00”
Const m2 = moment('3/11/2012 13:00 -0400').utc()。格式(“MM / DD HH: MM”)
Console.log ({m1, m2})
< script src = " https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js " > < /脚本>
但是如何在特定时区设置日期格式呢?
无论浏览器的当前时间如何,我都希望结果一致,但我不想以UTC显示日期。
正如Manto的回答中所指出的,. utcoffset()是第2.9.0时刻的首选方法。该函数使用UTC的真实偏移量,而不是反向偏移量(例如,DST期间的纽约为-240)。像“+0400”这样的偏移字符串的工作方式和以前一样:
// always "2013-05-23 00:55"
moment(1369266934311).utcOffset(60).format('YYYY-MM-DD HH:mm')
moment(1369266934311).utcOffset('+0100').format('YYYY-MM-DD HH:mm')
旧的.zone()作为setter在Moment.js 2.9.0中已弃用。它接受一个包含时区标识符的字符串(例如,“-0400”或“-04:00”表示-4小时)或表示UTC后分钟的数字(例如,夏令时期间的纽约为240)。
// always "2013-05-23 00:55"
moment(1369266934311).zone(-60).format('YYYY-MM-DD HH:mm')
moment(1369266934311).zone('+0100').format('YYYY-MM-DD HH:mm')
要使用命名时区而不是数值偏移量,请包括Moment Timezone并使用.tz():
// determines the correct offset for America/Phoenix at the given moment
// always "2013-05-22 16:55"
moment(1369266934311).tz('America/Phoenix').format('YYYY-MM-DD HH:mm')