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中yyyy-mm-dd和yyyy/mm/dd的结果不同;“新日期”;_Javascript_Date_Format - Fatal编程技术网

传递给“时,javascript中yyyy-mm-dd和yyyy/mm/dd的结果不同;“新日期”;

传递给“时,javascript中yyyy-mm-dd和yyyy/mm/dd的结果不同;“新日期”;,javascript,date,format,Javascript,Date,Format,我在nodejs repl下执行下面的语句,在同一日期得到两个不同的结果 var dateStr1 = "2015/03/31"; var dateStr2 = "2015-03-31"; var date1 = new Date(dateStr1);//gives Tue Mar 31 2015 00:00:00 GMT+0530 (IST) var date2 = new Date(dateStr2);//gives Tue Mar 31 2015 05:30:00 GMT+0530 (IS

我在nodejs repl下执行下面的语句,在同一日期得到两个不同的结果

var dateStr1 = "2015/03/31";
var dateStr2 = "2015-03-31";
var date1 = new Date(dateStr1);//gives Tue Mar 31 2015 00:00:00 GMT+0530 (IST)
var date2 = new Date(dateStr2);//gives Tue Mar 31 2015 05:30:00 GMT+0530 (IST)

在第一个一小时中,分钟、秒都是零,而在第二个一小时中,默认情况下,分钟被设置为时区小时,分钟是5:30

日期时间字符串可以是ISO 8601格式。例如,可以传递并解析“2011-10-10”(仅日期)或“2011-10-10T14:48:00”(日期和时间)。UTC时区用于解释ISO 8601格式中不包含时区信息的参数(请注意,ECMAScript ed 6草稿规定,不带时区的日期时间字符串将被视为本地的,而不是UTC)

您的第一个日期格式
2015/03/31
为您当前时区的2015年3月31日上午12点。
您的第二个日期格式
2015-03-31
被视为ISO-8601,并假定为2015年3月31日UTC时区上午12点

链接文档中的“假定时区差异”标题更为详细:

给定日期字符串“2014年3月7日”,parse()假定为本地时区,但给定ISO格式(如“2014-03-07”),它将假定为UTC时区。因此,使用这些字符串生成的日期对象将表示不同的时间时刻,除非系统设置了UTC的本地时区。这意味着,根据正在转换的字符串的格式,两个看起来等效的日期字符串可能会产生两个不同的值(此行为在ECMAScript ed 6中更改,以便将两者视为本地)


它归结为
Date.parse()
如何处理数据

日期时间字符串可以是ISO 8601格式。例如,可以传递并解析“2011-10-10”(仅日期)或“2011-10-10T14:48:00”(日期和时间)。UTC时区用于解释ISO 8601格式中不包含时区信息的参数(请注意,ECMAScript ed 6草稿规定,不带时区的日期时间字符串将被视为本地的,而不是UTC)

您的第一个日期格式
2015/03/31
为您当前时区的2015年3月31日上午12点。
您的第二个日期格式
2015-03-31
被视为ISO-8601,并假定为2015年3月31日UTC时区上午12点

链接文档中的“假定时区差异”标题更为详细:

给定日期字符串“2014年3月7日”,parse()假定为本地时区,但给定ISO格式(如“2014-03-07”),它将假定为UTC时区。因此,使用这些字符串生成的日期对象将表示不同的时间时刻,除非系统设置了UTC的本地时区。这意味着,根据正在转换的字符串的格式,两个看起来等效的日期字符串可能会产生两个不同的值(此行为在ECMAScript ed 6中更改,以便将两者视为本地)

根据ECMAScript标准,第一个字符串“2015/03/31”是不受支持的格式。当一个不受支持的值被传递给构造函数时,它的行为依赖于实现,即标准没有说明实现必须做什么。一些浏览器,如Firefox,试图猜测格式是什么,显然它会在当地时间午夜创建一个日期对象。其他浏览器可能返回
NaN
或以不同方式解释部分

第二个字符串“2015-03-31”是格式正确的ISO 8601日期。对于这些字符串,有定义良好的规则,所有浏览器都会将其解释为日期、午夜、UTC

根据ECMAScript标准,第一个字符串“2015/03/31”是不受支持的格式。当一个不受支持的值被传递给构造函数时,它的行为依赖于实现,即标准没有说明实现必须做什么。一些浏览器,如Firefox,试图猜测格式是什么,显然它会在当地时间午夜创建一个日期对象。其他浏览器可能返回
NaN
或以不同方式解释部分


第二个字符串“2015-03-31”是格式正确的ISO 8601日期。对于这些字符串,有定义良好的规则,所有浏览器都会将其解释为日期、午夜、UTC

^^^一个可能应该作为这个的副本关闭,而不是相反。考虑到文档链接"e,这个问题和答案都更清晰。@MichaelBerkowski是的,我有。这个问题以前被问过很多不同的方式,很难找到一个确切的dup。非常相似,而且相当古老。虽然格式略有不同。FY-您可能会考虑使用浏览器差异与日期解析。它肯定有资格作为一个“捉弄!”记录,“正确”的行为,和…完全违反直觉。“现在你知道了。”^^^一个应该作为这个的副本关闭,而不是相反。考虑到文档链接"e,这个问题和答案都更清晰。@MichaelBerkowski是的,我有。这个问题以前被问过很多不同的方式,很难找到一个确切的dup。非常相似,而且相当古老。虽然格式略有不同。FY-您可能会考虑使用浏览器差异与日期解析。它肯定有资格作为一个“捉弄!”记录,“正确”的行为,和…完全违反直觉。“现在你知道了。”正如我在自己的回答中提到的,这只是部分正确:“2015/03/31”是ECMA不支持的日期字符串。因此,由JS实现来决定如何处理它。许多浏览器将其解析为本地时区中的日期,但它们不必这样做。例如,Safari返回
NaN
。请不要选择