我遇到了一个奇怪的问题,即Internet Explorer没有将有效的字符串日期转换为JavaScript Date方法。
字符串如下:
2011-12-26T13:55:49.377Z
它在Chrome和Firefox上运行良好,但在Explorer上却没有。
这是代码:
var now = new Date;
var call_start = new Date(call.start);
var difference = now .getTime() - call_start.getTime();
call.start
有效但call_start
为NaN
,因此差异为NaN
。
这里有什么问题?
我真的需要毫秒......
答案 0 :(得分:1)
我们最近遇到同样的问题,
easyer方法是爆炸你的字符串或使用正则表达式并使用方法手动设置日期对象的每个部分
function getDateFromString(dString){
var d = new Date(), m=dString.match(/(\d\d\d\d)-(\d\d)-(\d\d)T(\d\d):(\d\d):(\d\d).(\d\d\d)Z/);
d.setFullYear(m[1]); // Sets the day of the month
d.setMonth(parseInt(m[2],10)-1); // Sets the month (from 0-11)
d.setDate(m[3]); // Sets the day of the month (from 1-31)
d.setHours(m[4]); // Sets the hour (from 0-23)
d.setMinutes(m[5]); // Set the minutes (from 0-59)
d.setSeconds(m[6]); // Sets the seconds (from 0-59)
d.setMilliseconds(m[7]); // Sets the milliseconds (from 0-999)
return d;
}
感谢来自microsoft的crapy Jscript实现
答案 1 :(得分:1)
function dateFromGMTString(str) {
var x=str.match(/(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})\.(\d{1,3})Z/);
return new Date(x[1],(+x[2])-1,x[3],x[4],x[5],x[6],x[7]);
}
<强>更新强>
您可以尝试使用Date.parse()
方法而不是Date contructor将GMT(JSON)等日期转换为javascript Date
对象。在这种情况下,您可以使用下一个代码示例尝试“patch” Date.parse()
。只需在页面javascript代码开头的任何地方添加此代码:
if(Date.parse("2000-01-01T00:00:00.000Z")+new Date().getTimezoneOffset()*60000!==(+new Date(2000,0,1,0,0,0,0))) {
(function() { // closure
var rg=/(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})\.(\d{1,3})Z/,
parseOriginal=Date.parse;
Date.parse=function(str) {
var x=str.match(rg);
return x?(+new Date(x[1],(+x[2])-1,x[3],x[4],x[5],x[6],x[7]))-new Date().getTimezoneOffset()*60000:parseOriginal.call(Date,str);
}
})();
}
执行上述代码后,您可以在所有浏览器(包括IE)中使用Date.parse()
,使用下一代码将字符串日期转换为javascript日期对象:
new Date(Date.parse("2011-12-26T13:55:49.377Z"));