2014年6月1日 星期日

JavaScript new Date() 在 IE8 以下,無法解析 ISO 8601 格式日期

ISO 8601 的日期格式,YYYY-MM-DDTHH:mm:ss.sssZ
一般 new Date() 可以解析此種日期格式,並建立日期物件。
例如:
var s ="2014-05-27T03:53:00.002+08:00";
var d= new Date(s);
alert(d); //回傳日期物件,但 IE8以下 會回傳 NaN

IE8以下 new Date('ISO 8601日期格式') 會回傳 NaN,因為 IE8以下不支援 ISO 日期格式。
http://msdn.microsoft.com/zh-tw/library/ff743760%28v=vs.94%29.aspx
裡面說明有一段「Internet Explorer 8 標準模式和 Quirks 模式不支援 ISO 日期格式。

要讓 IE8 以下也可以解析,只好自己拆日期字串,再給 new Date()
方法如下:
var s ="2014-05-27T03:53:00.002+08:00";
var d= new Date(s);
if(isNaN(d)){ // 無法解析
    s = s.split(/\D/); // 分割日期字串
    d= new Date(s[0],s[1]-1,s[2],s[3],s[4],s[5]);//這一行改用以下兩行也可以
    //s = s[0]+'/'+s[1]+'/'+s[2]+' '+s[3]+':'+s[4]+':'+s[5];
    //d= new Date(s);
    alert(d); // 回傳日期物件
}

參考:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date
http://biostall.com/javascript-new-date-returning-nan-in-ie-or-invalid-date-in-safari
http://stackoverflow.com/questions/17592717/result-of-tojson-on-a-date-is-different-between-ie8-and-ie9

沒有留言:

張貼留言