一尘不染

格式化特定时区中的日期

javascript

我正在使用Moment.js解析和格式化Web应用程序中的日期。作为JSON对象的一部分,我的后端服务器以UTC纪元(Unix偏移)为单位发送日期(以毫秒为单位)。

在特定时区中 解析日期很容易-只需在解析前将RFC 822时区标识符附加到字符串的末尾即可:

// response varies according to your timezone

const m1 = moment('3/11/2012 13:00').utc().format("MM/DD HH:mm")



// problem solved, always "03/11 17:00"

const m2 = moment('3/11/2012 13:00 -0400').utc().format("MM/DD HH:mm")



console.log({ m1, m2 })


<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>

但是,如何格式化 特定时区中 的日期?

无论浏览器的当前时间如何,我都希望获得一致的结果,但是我不想以UTC显示日期。


阅读 369

收藏
2020-05-01

共1个答案

一尘不染

此函数使用相对于UTC的实际偏移量,而不使用反向偏移量(例如,夏令时期间,纽约为-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')

Moment.js 2.9.0 中 已弃用了较旧.zone()的设置器。它接受含有时区标识符的字符串(例如,“-0400”或“-04:00”为-4小时),或者表示分钟数后面UTC(例如,240为纽约DST期间)。

// 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时区并.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')
2020-05-01