首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >奇怪的行为格式化moment.js日期

奇怪的行为格式化moment.js日期
EN

Stack Overflow用户
提问于 2016-03-22 21:04:02
回答 4查看 1K关注 0票数 4

我们正在跟踪应用程序中似乎与moment.js格式相关的一个bug。

下面是有问题的调用(在Chrome、FF和Edge中复制,以供参考):

代码语言:javascript
运行
复制
moment('2016-03-13T23:59:59.999-06:00').format('YYYY-MM-DD')

我们期望的是:

2016-03-13

我们得到的是:

2016-03-14

这似乎与夏令时有关,因为这是我们能够复制这一错误行为的唯一日期(到目前为止),并在那天翻转了DST。

如果我们将UTC偏移量切换到-05:00,那么它就能正常工作。

下面是一个简单的示范 JSBIN

这里发生了什么事?我们怎么解决这个问题?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-03-23 02:02:46

如果使用默认的矩构造函数,会将带有偏移量的日期转换为您所在计算机的本地时区。

由于这个原因,您的代码正在按预期工作。日期从-6开始转换为本地偏移量。

如果要使用指定时区偏移量中的日期,请使用moment.parseZone:

代码语言:javascript
运行
复制
moment.parseZone('2016-03-13T23:59:59.999-06:00').format()
"2016-03-13T23:59:59-06:00"

如果要忽略时区偏移量,并在本地时间工作,请指定不包括偏移量的格式。通过这样做,将使偏移量被忽略。

代码语言:javascript
运行
复制
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/

票数 6
EN

Stack Overflow用户

发布于 2016-03-22 21:40:55

有关带时区的解析的文档中,它们显示为了考虑输入字符串中指定的时区,您应该使用moment.parseZone()

代码语言:javascript
运行
复制
console.log(moment.parseZone('2016-03-13T23:59:59.999-06:00').format('YYYY-MM-DD'));
代码语言:javascript
运行
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.12.0/moment.min.js"></script>

上面的输出"2016-03-13“在控制台上为我。

票数 3
EN

Stack Overflow用户

发布于 2016-03-22 21:17:57

您要在编码(-6)上指定时区,但需要依赖客户端时区进行格式化。区别是罪魁祸首。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36165182

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档