gpt4 book ai didi

javascript - JS Date() - 日期前导零

转载 作者:行者123 更新时间:2023-11-30 08:34:16 25 4
gpt4 key购买 nike

字符串中日期的前导零似乎破坏了 Chrome 中的 Javascript 日期对象。浏览器之间也存在一些不一致,因为 Firefox 正确处理前导零,但在不包含零时会失败。请参阅此示例:https://jsfiddle.net/3m6ovh1f/3/

日期('2015-11-01');//适用于 Firefox,不适用于 Chrome

日期('2015-11-1');//适用于 Chrome,不适用于 Firefox

为什么?是否有解决/使用前导零的好方法?

请注意,字符串是通过 AJAX 来自 MySQL 的,所有日期都将包含前导零,我可以通过在服务器端格式化日期来解决这个问题。哪种格式效果最好?

编辑

只是为了说明我的问题是什么,Chrome 似乎正在对 YYYY-MM-DD 格式应用时区,这会将 11 月 1 日的日期恢复为 10 月 31 日的日期(因为我的美国东部时间本地时间)。

最佳答案

根据 ECMA-262 (5.1) :

The function first attempts to parse the format of the String according to the rules called out in Date Time String Format (15.9.1.15). If the String does not conform to that format the function may fall back to any implementation-specific heuristics or implementation-specific date formats.

15.9.1.15 中描述的日期/时间字符串格式为 YYYY-MM-DDTHH:mm:ss.sssZ。它也可以是这种格式的更短表示形式,例如 YYYY-MM-DD

2015-11-1 不是 Javascript 的有效日期/时间字符串(注意它是 YYYY-MM-D 而不是 YYYY-MM-DD)。因此,实现(浏览器)能够用该字符串做任何它想做的。它可以尝试以不同的格式解析字符串,或者它可以简单地说该字符串是无效日期。 Chrome 选择前者(参见 DateParser::Parse )并尝试将其解析为“遗留”日期。 Firefox 似乎选择了后者,拒绝解析。

现在,您声称 new Date('2015-11-01') 在 Chrome 中不起作用是不正确的。由于字符串符合日期/时间字符串格式,Chrome 必须 解析它以符合规范。事实上,我只是亲自尝试过——它在 Chrome 中有效。

那么,您有哪些选择?

  1. 使用正确的日期/时间格式(即YYYY-MM-DD 或其某些扩展名)。

  2. 使用 new Date (year, month, date) 构造函数,即 new Date(2015, 10, 1)(月份为 0-11 ) 在这种情况下。

哪个选项由您决定,但是所有符合规范的浏览器都应该同意的日期/时间字符串格式。

关于javascript - JS Date() - 日期前导零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33439634/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com