Man*_*mar 22 javascript format date
我在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)
Run Code Online (Sandbox Code Playgroud)
在第1小时,分钟,秒均为零,而在第2小时默认为小时,分钟设置为时区小时,分钟为5:30
Mr.*_*ama 18
它归结为如何Date.parse()处理ISO-8601日期格式.
日期时间字符串可以是ISO 8601格式.例如,可以传递和解析"2011-10-10"(仅限日期)或"2011-10-10T14:48:00"(日期和时间).UTC时区用于解释ISO 8601格式中不包含时区信息的参数(请注意,ECMAScript ed 6 draft指定不带时区的日期时间字符串将被视为本地,而不是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的时区.因此,使用这些字符串生成的Date对象将表示不同的时刻,除非系统设置了UTC的本地时区.这意味着两个看起来等效的日期字符串可能会导致两个不同的值,具体取决于正在转换的字符串的格式(此行为在ECMAScript ed 6中已更改,因此两者都将被视为本地).
2015/03/31根据ECMAScript标准,第一个字符串实际上是不受支持的格式.每当将不受支持的值传递给构造函数时,它的行为都是未定义的,即标准没有说明实现必须执行的操作.有些浏览器,比如Firefox,试图猜测格式是什么,显然它会在当地时间午夜创建一个日期对象.其他浏览器,如Safari,返回NaN.
第二个字符串2015-03-31是格式正确的ISO 8601日期.对于这些字符串,有明确定义的规则,所有浏览器都会将其解释为日期,午夜,utc.
| 归档时间: |
|
| 查看次数: |
9420 次 |
| 最近记录: |