变种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