Date的迷思
不得不说Javascript的Date类的功能实在比较弱,没有format功能,导致创建和打印的时候都要多费一些代码。对于创建Date对象,有四种方法可以用:
new Date(); new Date(value); new Date(dateString); new Date(year, month, day, hour, minute, second, millisecond);
其中1、2、4的参数比较确定,不用多说。而方法3的dateString是什么格式?这是需要注意的地方。该参数的解释是这样的:
表示日期的字符串值。该字符串应该能被 Date.parse() 方法识别(符合 IETF-compliant RFC 2822 timestamps 或 version of ISO8601)。
写这种字符串是什么体验?
new Date("Apr 14, 2015"); new Date("Tue, 14 Apr 2015 21:06:25 GMT+0800");
这种不太符合中国人习惯的风格写起来真是别扭啊。需要摸索一个简洁的写法,比如说”2015-04-14″,这种格式行不行呢?在几款浏览器下做了实验,并不是完全兼容的。
Chrome | IE9,10 | IE6-8 | |
---|---|---|---|
new Date(‘2015-04-14′) | Tue Apr 14 2015 08:00:00 GMT+0800 (CST) | Tue Apr 14 08:00:00 UTC+0800 2015 | NaN |
new Date(‘2015-4-14′) | Tue Apr 14 2015 00:00:00 GMT+0800 (CST) | Invalid Date | NaN |
new Date(‘2015-04-14 21:12:25′) | Tue Apr 14 2015 21:12:25 GMT+0800 (CST) | Invalid Date | NaN |
new Date(‘2015-4-14 21:12:25′) | Tue Apr 14 2015 21:12:25 GMT+0800 (CST) | Invalid Date | NaN |
new Date(‘2015/04/14′) | Tue Apr 14 2015 00:00:00 GMT+0800 (CST) | Tue Apr 14 00:00:00 UTC+0800 2015 | Tue Apr 14 00:00:00 UTC+0800 2015 |
new Date(‘2015/4/14′) | Tue Apr 14 2015 00:00:00 GMT+0800 (CST) | Tue Apr 14 00:00:00 UTC+0800 2015 | Tue Apr 14 00:00:00 UTC+0800 2015 |
new Date(’15/04/14′) | Invalid Date | Thu Mar 4 00:00:00 UTC+0800 1915 | Thu Mar 4 00:00:00 UTC+0800 1915 |
new Date(‘2015/04/14 21:06:25′) | Tue Apr 14 2015 21:06:25 GMT+0800 (CST) | Tue Apr 14 21:06:25 UTC+0800 2015 | Tue Apr 14 21:06:25 UTC+0800 2015 |
new Date(‘2015/4/14 21:6:25′) | Tue Apr 14 21:06:25 UTC+0800 2015 | Tue Apr 14 21:06:25 UTC+0800 2015 | Tue Apr 14 21:06:25 UTC+0800 2015 |
从以上浏览器的比较中可以看出形如”yyyy-MM-dd”在IE中的兼容性不佳,亦有时区的问题。而“yyyy/MM/dd”以及“yyyy/MM/dd HH:mm:ss”在各浏览器下的兼容性比较好,推荐使用这个。