【一天一道兼容性】之——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日这一天。