變種D1 =「2011-03-02T15:30:18 -08:00',d2 ='2011-03-02T15:36:05-08:00'; 某些瀏覽器可以使用新的Date或Date.parse將ISO字符串轉換爲Date。
今天很多瀏覽器都無法使用 - 您可能需要編寫自己的轉換。
這一個似乎工作,但它需要改進。基於mozilla org的公共代碼,我添加了一個沒有array.map的瀏覽器。
Date.fromISO= function(s){
var day, tz,
rx= /^(\d{4}\-\d\d\-\d\d([tT][\d:\.]*)?)([zZ]|([+\-])(\d\d):(\d\d))?$/,
p= rx.exec(s) || [];
if(p[1]){
day= p[1].split(/\D/).map(function(itm){
return parseInt(itm, 10) || 0;
});
day[1]-= 1;
day= new Date(Date.UTC.apply(Date, day));
if(!day.getDate()) return NaN;
if(p[5]){
tz= parseInt(p[5], 10)*60;
if(p[6]) tz += parseInt(p[6], 10);
if(p[4]== "+") tz*= -1;
if(tz) day.setUTCMinutes(day.getUTCMinutes()+ tz);
}
return day;
}
return NaN;
}
Array.prototype.map= Array.prototype.map || function(fun, scope){
var L= this.length, A= [], i= 0;
if(typeof fun== 'function'){
while(i< L){
if(i in this) A[i]= fun.call(scope, this[i], i, this);
++i;
}
return A;
}
}
var d1= '2011-03-02T15:30:18-08:00', d2= '2011-03-02T15:36:05-08:00';
alert(Date.fromISO(d1)-Date.fromISO(d2)+' milliseconds')
你有一個字符串形式的時間戳,還是你確實有「日期」的實例? (我問,因爲這些賦值語句是語法錯誤,因爲他們目前的立場。) – Pointy 2011-03-02 23:51:14
假是正確的答案。 「2011-03-02T15:30:18-08:00」不大於「2011-03-02T15:36:05-08:00」。 – 2011-03-03 00:04:01
另外,除了第一個控制檯消息外,d1中的所有內容都很奇怪。他們都以「36:515」開頭 – 2011-03-03 00:04:54