Moment.js:在特定时区格式化date

我正在使用Moment.js在我的web应用程序中parsing和格式化date。 作为JSON对象的一部分,我的后端服务器发送的date是从UTC纪元(Unix偏移量)开始的毫秒数。

在特定的时区parsingdate很简单 – 在parsing之前,只需将RFC 822时区标识符附加到string的末尾即可:

// response varies according to your timezone moment('3/11/2012 13:00').utc().format("MM/DD HH:mm") // problem solved, always "03/11 17:00" moment('3/11/2012 13:00 -0400').utc().format("MM/DD HH:mm") 

但是,如何在特定的时区格式化date? 无论浏览器的当前时间如何,我都希望获得一致的结果,但我不希望以UTC显示date。

正如在Manto的回答中指出的那样, .utcOffset()是从2.9.0版开始的首选方法。 此函数使用UTC的实际偏移量,而不是反向偏移量(例如,在DST期间,纽约为-240)。 像“+0400”这样的偏移string的工作原理与之前一样:

 // 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中被弃用 。 它接受包含时区标识符的string(例如,“-400小时”的“-0400”或“-04:00”)或代表UTC之后几分钟的数字(例如,DST期间的纽约为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') 

使用时刻 – 时区

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

在访问特定时区之前,您需要像这样加载(或使用此处所述的其他方法)

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

.zone()已被弃用,您应该使用utcOffset:

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

我与Moment.js有同样的问题。 我已经安装了时区,但问题没有解决。 然后,我只是在这里做了些什么,设置时区,它就像一个魅力:

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

非常感谢!

刚刚来了这个,因为我有同样的问题,我只是张贴我想出的结果

当parsing,你可以更新偏移(即我parsing一个数据(1.1.2014),我只想要date,2014年1月1日。在格林尼治标准时间+ 1我会得到31.12.2013所以我抵消了价值第一。

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

那么,我支持跨时区的支持