du blog
Hello, welcome to my blog
new Date()兼容问题
created: Oct 23 20updated: Oct 26 20

new Date()四种使用方式:

1.无参数

2.时间戳

3.dateString

4.分别提供日期与时间的每一个成员

其中dateString浏览器的存在不同的表现,在这里用了四种常见的格式进行总结

new Date('2016-10-01')

new Date('2016-10-01 16:09:08')

new Date('2016/10/01')

new Date('2016/10/01 16:09:08')

new Date('2016-10-01T16:09:08Z')

前四种是非标准的格式

第五中是ecma标准的格式,是基于iso8601简化版,标准在这里15.9.1.15节

各浏览器表现

那么我们一次看一下在各个浏览器的表现

IE

new Date('2016-10-01') 支持 但是会被认为是0时区的utc时间 转换为+8时区的时候就加上8个小时

new Date('2016-10-01 16:09:08') 不支持直接invalid date

new Date('2016/10/01') 支持 并且被认为是+8时区的时间 不会产生时区偏移

new Date('2016/10/01 16:09:08') 支持

new Date('2016-10-01T16:09:08Z') 支持

Safari

new Date('2016-10-01') 支持 但是会被认为是0时区的utc时间 转换为+8时区的时候就加上8个小时

new Date('2016-10-01 16:09:08') 不支持直接invalid date

new Date('2016/10/01') 支持 并且被认为是+8时区的时间 不会产生时区偏移

new Date('2016/10/01 16:09:08') 支持

new Date('2016-10-01T16:09:08Z') 支持

FireFox

new Date('2016-10-01') 支持 但是会被认为是0时区的utc时间 转换为+8时区的时候就加上8个小时

new Date('2016-10-01 16:09:08') 支持

new Date('2016/10/01') 支持 并且被认为是+8时区的时间 不会产生时区偏移

new Date('2016/10/01 16:09:08') 支持

new Date('2016-10-01T16:09:08Z') 支持

Chrome

new Date('2016-10-01') 支持 但是会被认为是0时区的utc时间 转换为+8时区的时候就加上8个小时

new Date('2016-10-01 16:09:08') 支持

new Date('2016/10/01') 支持 并且被认为是+8时区的时间 不会产生时区偏移

new Date('2016/10/01 16:09:08') 支持

new Date('2016-10-01T16:09:08Z') 支持

总结

2016-10-01这种不带时间的格式会产生时区偏移,加上时间的new Date('2016-10-01 16:09:08') ie和safari是直接不支持的,所有这种格式还是不要使用了

new Date('2016/10/01')斜杠的格式可能因为历史原因 是都支持的

new Date('2016-10-01T16:09:08Z') 标准的ecma格式各家浏览器都支持,毕竟2011年的标准,现在的支持性还是比较好的