传递给“时,javascript中yyyy-mm-dd和yyyy/mm/dd的结果不同;“新日期”;
我在nodejs repl下执行下面的语句,在同一日期得到两个不同的结果传递给“时,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
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
。请不要选择