在工作中多次遇到使用 new Date() 的问题,记录一下吧!
在IE,safari, ios中的微信环境下..
new Date('2016-01-01 00:00:00') //却返回这个值Invalid Date,转换失败
new Date('2016/01/01 00:00:00') //这下就转换正确了Wed Jan 1 00:00:00 UTC+0800 2014
具体的原理我也不知道,也没有去查看。应该就是浏览器内核中对Date对象处理方式的不同,就是字符串的格式不被某些浏览器识别而导致的,核心代码我也贴不出来,无法寻根问底
说说解决的方案吧
- 填入明确的时间,日期后面加 ‘T’
var Time = new Date('2016-01-01 00:00:00'); //ios中starTime为Invalid Date、NaN var Time2 = new Date('2016-01-01T00:00:00'); //日期和时间中间加个T,兼容ios
- 字符串转换的方式
var date="2016-12-12 10:10:10"; date=date.replace(new RegExp(/-/gm) ,"/"); //将所有的'-'转为'/'即可 var d=new Date(date);
给Date添加Format方法的代码段,避免转换
Date.prototype.Format = function (fmt) { //author: meizz
var o = {
"M+": this.getMonth() + 1, //月份
"d+": this.getDate(), //日
"h+": this.getHours(), //小时
"m+": this.getMinutes(), //分
"s+": this.getSeconds(), //秒
"q+": Math.floor((this.getMonth() + 3) / 3), //季度
"S": this.getMilliseconds() //毫秒
};
if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
for (var k in o)
if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
return fmt;
}
var Time = new Date().Format("yyyy/MM/dd hh:mm:ss"); // 避免了转换
var time = new Date(Time );