【一天一道兼容性】之——IE下new Date()的传参格式

少叙闲言

在表单中我们常用到输入日期,有日期就会有格式要求,所以我们会采用插件一类的方法来统一输入格式,例如yyyy-mm-dd、yyyy/mm/dd,这一类的格式在直接以字符串的形式传入Date()来获取时间对象的时候,Chrome和FF都会表现正常,但IE下全系歇菜......

正题

demo:

 

1 var time_1 = "2012-12-12";
2 var time_2 = "2012/12/12";
3 
4 alert(new Date(time_1))  //Chrome/FF: Thu May 30 2013 09:40:45 GMT+0800 (中国标准时间)  IE678: NaN   IE9: Invalid Date
5 alert(new Date(time_2))  //Chrome/FF: Thu May 30 2013 09:40:45 GMT+0800 (中国标准时间)  IE678: NaN   IE9: Invalid Date

 

解析:

IE不支持这种格式,而是支持yyyy,mm,dd,注意此处数据类型为数字类型,而且月份要减1

 

解决方案:

 1 var time_1 = "2012-12-12";
 2 var time_2 = "2012/12/12";
 3 function fixDate(time) {
 4     if (!document.all) {
 5         return new Date(time);
 6     }
 7     var arr = time.split(time.match(/\D+/g)[0]);
 8     return new Date(arr[0], arr[1] - 1, arr[2]);
 9 }
10 alert(fixDate(time_1))
11 alert(fixDate(time_2))

 

汇总一下new Date的一些传参格式:

month:用英文 表示月份名称,从January到December
mth:用整数表示月份,从0(1月)到11(12月)
dd:表示一个 月中的第几天,从1到31
yyyy:四位数表示的年份
hh:小时数,从0(午夜)到23(晚11点)
mm: 分钟数,从0到59的整数
ss:秒数,从0到59的整数
ms:毫秒数,为大于等于0的整数

new Date("January 12,2006 22:19:35");

 

new Date("January 12,2006");

new Date(2006,0,12,22,19,35);

new Date(2006,0,12);

new Date(1137075575000);

上面的各种创建形式都表示2006年1月12日这一天。

 

 

posted on 2013-05-30 10:08  _xiaoMo_  阅读(2617)  评论(0编辑  收藏  举报

导航