我们正在跟踪应用程序中似乎与moment.js格式相关的一个bug。
下面是有问题的调用(在Chrome、FF和Edge中复制,以供参考):
moment('2016-03-13T23:59:59.999-06:00').format('YYYY-MM-DD')
我们期望的是:
2016-03-13
我们得到的是:
2016-03-14
这似乎与夏令时有关,因为这是我们能够复制这一错误行为的唯一日期(到目前为止),并在那天翻转了DST。
如果我们将UTC偏移量切换到-05:00
,那么它就能正常工作。
下面是一个简单的示范 JSBIN
这里发生了什么事?我们怎么解决这个问题?
发布于 2016-03-22 18:02:46
如果使用默认的矩构造函数,会将带有偏移量的日期转换为您所在计算机的本地时区。
由于这个原因,您的代码正在按预期工作。日期从-6开始转换为本地偏移量。
如果要使用指定时区偏移量中的日期,请使用moment.parseZone:
moment.parseZone('2016-03-13T23:59:59.999-06:00').format()
"2016-03-13T23:59:59-06:00"
如果要忽略时区偏移量,并在本地时间工作,请指定不包括偏移量的格式。通过这样做,将使偏移量被忽略。
moment('2016-03-13T23:59:59.999-06:00', 'YYYY-MM-DDTHH:mm:ss.SSS').format()
"2016-03-13T23:59:59-05:00"
注意,我在UTC-5中,偏移量显示为-5,因为我在日期中忽略了偏移量。
解析指南可能会有一些帮助:http://momentjs.com/guides/#/parsing/
发布于 2016-03-22 13:40:55
在有关带时区的解析的文档中,它们显示为了考虑输入字符串中指定的时区,您应该使用moment.parseZone()
。
console.log(moment.parseZone('2016-03-13T23:59:59.999-06:00').format('YYYY-MM-DD'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.12.0/moment.min.js"></script>
上面的输出"2016-03-13“在控制台上为我。
发布于 2016-03-22 13:17:57
您要在编码(-6)上指定时区,但需要依赖客户端时区进行格式化。区别是罪魁祸首。
https://stackoverflow.com/questions/36165182
复制相似问题