我们正在追踪我们应用程序中的一个错误,该错误似乎与 moment.js 格式有关。
下面是有问题的调用(在 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 到 demonstrate
这是怎么回事?我们如何解决这个问题?
最佳答案
如果您使用默认的 moment 构造函数,Moment 会将带有偏移量的日期转换为您所在计算机的本地时区。
因此,您的代码按预期工作。日期取自 -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/
关于javascript - 奇怪的行为格式化 moment.js 日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36165182/