Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript日期与前面的零不一致_Javascript_Date - Fatal编程技术网

javascript日期与前面的零不一致

javascript日期与前面的零不一致,javascript,date,Javascript,Date,将格式为“YYYY-mm-dd”的日期字符串转换为JavaScript中的日期对象时,我发现输出中存在不一致之处,我不理解。当一个月中的一个数字日前面有一个零时,我会得到不同的时间。我希望有人能给我解释一下 下面是一个控制台代码片段来说明我的意思,第一个是不一致的情况: d = new Date('2020-01-09'); Wed Jan 08 2020 19:00:00 GMT-0500 (Eastern Standard Time) d = new Date('2020-01-9');

将格式为“YYYY-mm-dd”的日期字符串转换为JavaScript中的日期对象时,我发现输出中存在不一致之处,我不理解。当一个月中的一个数字日前面有一个零时,我会得到不同的时间。我希望有人能给我解释一下

下面是一个控制台代码片段来说明我的意思,第一个是不一致的情况:

d = new Date('2020-01-09');
Wed Jan 08 2020 19:00:00 GMT-0500 (Eastern Standard Time)

d = new Date('2020-01-9');
Thu Jan 09 2020 00:00:00 GMT-0500 (Eastern Standard Time)

d = new Date('2020-1-9');
Thu Jan 09 2020 00:00:00 GMT-0500 (Eastern Standard Time)

d = new Date('2020-01-019');
Sun Jan 19 2020 00:00:00 GMT-0500 (Eastern Standard Time)

d = new Date('2020-01-09 EST');
Thu Jan 09 2020 00:00:00 GMT-0500 (Eastern Standard Time)
所以当一天是两位数,第一个是零,它给了我一个早五个小时的时间,特别是与时区相同的偏移量。两位数日期前的零没有区别,日期前的零也没有区别

还要注意最后一行,我使用了相同的格式,但也附加了时区。这似乎解决了问题

有人能解释一下为什么会发生这种情况吗?

根据文档,如果传递的是非标准日期字符串,那么解析可能采用UTC时区,这就是为什么您的时间显示出5小时的差异

您看到了不一致性,因为规范没有任何关于如何处理这些无效字符串的具体内容;这取决于浏览器的实现。这也适用于上一点,即假设UTC时区

如果字符串不符合标准格式,函数可能会退回到任何特定于实现的启发式或特定于实现的解析算法

根据文档,如果您传递的是非标准日期字符串,那么解析可能采用UTC时区,这就是为什么您的时间显示出5小时的差异

您看到了不一致性,因为规范没有任何关于如何处理这些无效字符串的具体内容;这取决于浏览器的实现。这也适用于上一点,即假设UTC时区

如果字符串不符合标准格式,函数可能会退回到任何特定于实现的启发式或特定于实现的解析算法


Date
构造函数希望字符串为RFC2822格式。这些都不是那种格式。如果不是,您的结果将不一致。如果您向
new Date
的构造函数传递一个非
ISO 8601
格式的字符串,则不会定义您得到的结果。因此,在这种情况下,不应期望任何可靠或可解释的内容。另请参见
Date
构造函数期望字符串为RFC 2822格式。这些都不是那种格式。如果不是,您的结果将不一致。如果您向
new Date
的构造函数传递一个非
ISO 8601
格式的字符串,则不会定义您得到的结果。因此,在这种情况下,不应期望任何可靠或可解释的内容。也请注意这是有意义的-但为什么它与我插入的其他格式一起工作?@JacobEwing当格式与RFC 2822不一致时,您可能会在不同的浏览器中得到不同的结果。该规范说“它需要在RFC2822中,如果不是,则留给每个实现如何处理它。”@Amy请不要关注RFC2822。ECMA-262指定了两种精确格式,一种是RFC2822兼容的格式,但它通常不支持所有可能的RFC2822格式,正如ECMA-262也支持一种精确的ISO 8601兼容格式,但通常不支持ISO 8601(并且在仅限日期的格式方面与ISO 8601不一致)。这是有道理的-但为什么它与我插入的其他格式一起工作?@JacobEwing当格式与RFC 2822不一致时,在不同的浏览器中可能会得到不同的结果。该规范说“它需要在RFC2822中,如果不是,则留给每个实现如何处理它。”@Amy请不要关注RFC2822。ECMA-262指定了两种精确格式,一种是RFC2822兼容格式,但它通常不支持所有可能的RFC2822格式,正如ECMA-262也支持一种精确的ISO 8601兼容格式,但通常不支持ISO 8601(并且在仅限日期的格式方面与ISO 8601不一致)。