我使用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显示日期。


当前回答

使用moment-timezone

moment(date).tz('Europe/Berlin').format(format)

在能够访问特定时区之前,您需要像这样加载它(或使用此处描述的替代方法)

moment.tz.add('Europe/Berlin|CET CEST CEMT|-10 -20 -30')

其他回答

只是偶然发现了这个,因为我也有同样的问题,我只是发布了我想到的结果

在解析时,你可以更新偏移量(即我正在解析一个数据(1.1.2014),我只想要日期,2014年1月1日。在格林尼治标准时间+1上,我会得到31.12.2013。所以我先偏移这个值。

moment(moment.utc('1.1.2014').format());

对我来说跨越时区的支持很方便

B

使用moment-timezone

moment(date).tz('Europe/Berlin').format(format)

在能够访问特定时区之前,您需要像这样加载它(或使用此处描述的替代方法)

moment.tz.add('Europe/Berlin|CET CEST CEMT|-10 -20 -30')

我在使用Moment.js时也遇到了同样的问题。我已经安装了moment-timezone,但是这个问题没有解决。然后,我做了这里曝光的事情,设置时区,它就像一个魅力:

moment(new Date({your_date})).zone("+08:00")

非常感谢!

.zone()已经弃用,你应该使用utcOffset:

// for a timezone that is +7 UTC hours
moment(1369266934311).utcOffset(420).format('YYYY-MM-DD HH:mm')

你可以试试这个,

在这里,您可以根据客户端时区(浏览器)获取日期。

moment(new Date().getTime()).zone(new Date().toString().match(/([-\+][0-9]+)\s/)[1]).format('YYYY-MM-DD HH:mm:ss')

正则表达式基本上会得到偏移值。

干杯! !