关于js Date的那些坑

ie8中var t1=new Date(‘2015-04-07’)报错

翻查官方文档

new Date()支持以下几种参数形式

1
2
3
4
new Date();
new Date(value);
new Date(dateString);
new Date(year, month[, day[, hour[, minutes[, seconds[, milliseconds]]]]]);

2015-04-07相当于第三种 datestring

img1
__
就是说datestring得支持parse解析

img2

同时提到了,ie8不支持iso8601 时间表示法
img3

如果使用的iso8601时间jin进行格式化,那使用的utc时区就是当地时区
img3

1
2
3
4
5
6
7
8
var a=Date.parse("March 7, 2014");
var b=Date.parse("2014-03-07");
var c=new Date()
c.setTime(a);
var d=new Date()
d.setTime(b);
console.log(c,c.getMonth(),c.getDate(),c.getHours());
console.log(d,d.getMonth(),d.getDate(),d.getHours());

chrome中结果
img5

火狐中结果
img3

同理

1
2
3
4
var c=new Date("March 7, 2014");
var d=new Date("2014-03-07");
console.log(c,c.getMonth(),c.getDate(),c.getHours());
console.log(d,d.getMonth(),d.getDate(),d.getHours());

分析,第一种初始化的方式,会假设当前设置的时区为当地时区,故设置结果和实际相符

第二种初始化时,会假设当前设置的时区为utc标准时区,而北京时区比实际快8个小时,所以转化为当地时区后就是8点