Moment.js:在一个特定的时区格式日期(Moment.js: Format date in a

2019-07-21 09:00发布

我使用Moment.js解析,在我的web应用程序格式的日期。 作为JSON对象的一部分,我的后端服务器发送的日期作为一个数从UTC历元的毫秒(Unix的偏移)。

在一个特定的时区解析日期很容易-只需在RFC 822时区标识符追加到分析前的字符串的结尾:

// 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")

但我怎么格式化一个specifc时区的日期? 我想一致的结果,无论浏览器的当前时间,但我不希望显示UTC日期。

Answer 1:

正如指出曼托的回答 , .utcOffset()是作为矩2.9.0的优选方法。 此功能使用真实UTC的偏移量,而不是相反偏移(例如,对于-240 DST在纽约)。 胶印机串像“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()作为二传手在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')

要使用命名的时区,而不是数字补偿工作,包括瞬间时区 ,并使用.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')


Answer 2:

使用矩时区

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

能够访问一个特定的时区之前,你需要加载它,像这样(或者使用上述替代方法在这里 )

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


Answer 3:

.zone()已被弃用,而应改用UTCOFFSET:

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


Answer 4:

一对夫妇的答案已经提到的那一刻,时区是去与命名时区的方式。 我只是想澄清一些关于这个库是相当混乱给我。 有这两个语句之间的区别:

moment.tz(date, format, timezone)

moment(date, format).tz(timezone)

假设一个时区是不是在通过的日期规定:

第一代码利用的日期和假定时区是一个在通过。第二个将根据传入的时区取日期,假定来自浏览器的时区,然后改变时间和时区。

例:

moment.tz('2018-07-17 19:00:00', 'YYYY-MM-DD HH:mm:ss', 'UTC').format() // "2018-07-17T19:00:00Z"

moment('2018-07-17 19:00:00', 'YYYY-MM-DD HH:mm:ss').tz('UTC').format() // "2018-07-18T00:00:00Z"

我的时区是从UTC +5。 因此,在第一种情况下它不会改变,并将它设置日期和时间有UTC时区。

在第二种情况下,它假定在-5,然后把它变成UTC通过的日期,这就是为什么它吐出来的是日期“2018-07-18T00:00:00Z”

注:format参数是非常重要的。 如果省略时刻可能回落到Date类可以不可预知的行为


假设时区中通过的日期指定:

在这种情况下,他们都同样表现


虽然现在我明白为什么它的工作原理是这样的,我认为这是一个非常混乱的特点,值得向大家解释。



Answer 5:

我是有Moment.js同样的问题。 我已经安装了片刻,时区,但问题没有得到解决。 然后,我也只是在这里就是它的曝光,设置时区和它的作品就像一个魅力:

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

非常感谢!



Answer 6:

刚刚来到这个acreoss,因为我有同样的问题,我只是发表我想出了一个结果

在解析时,你可以更新偏移量(即我解析数据(2014年1月1日),我只想要日期,1月1日2014年。GMT + 1 I会得到2013年12月31日。所以我第一偏离值。

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

那么,派上了用场,我跨时区支持



Answer 7:

你可以试试这个,

在这里你可以得到一个基于客户端时区(浏览器)的日期。

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

正则表达式基本上可以让你的偏移值。

干杯!!



文章来源: Moment.js: Format date in a specific timezone