我使用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日期。
正如指出曼托的回答 , .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')
使用矩时区
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.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类可以不可预知的行为
假设时区中通过的日期指定:
在这种情况下,他们都同样表现
虽然现在我明白为什么它的工作原理是这样的,我认为这是一个非常混乱的特点,值得向大家解释。
我是有Moment.js同样的问题。 我已经安装了片刻,时区,但问题没有得到解决。 然后,我也只是在这里就是它的曝光,设置时区和它的作品就像一个魅力:
moment(new Date({your_date})).zone("+08:00")
非常感谢!
刚刚来到这个acreoss,因为我有同样的问题,我只是发表我想出了一个结果
在解析时,你可以更新偏移量(即我解析数据(2014年1月1日),我只想要日期,1月1日2014年。GMT + 1 I会得到2013年12月31日。所以我第一偏离值。
moment(moment.utc('1.1.2014').format());
那么,派上了用场,我跨时区支持
乙
你可以试试这个,
在这里你可以得到一个基于客户端时区(浏览器)的日期。
moment(new Date().getTime()).zone(new Date().toString().match(/([-\+][0-9]+)\s/)[1]).format('YYYY-MM-DD HH:mm:ss')
正则表达式基本上可以让你的偏移值。
干杯!!