从如下字符串中获取Javascript Date对象的最佳方法是什么:
2011-06-02T09:34:29+02:00 ?我对时区部分有问题(很明显)。
发布于 2011-06-03 22:27:51
var myDate = new Date('2011-06-02T09:34:29+02:00');
alert(myDate);发布于 2011-06-03 23:51:18
IE 8及更低版本,以及其他浏览器的较早版本不实现ISO日期格式。一个问题是,一些浏览器确实返回日期,而不是NaN,只是返回的不是正确的日期。
如果你想支持它们,你可以写你自己的方法。时区是一个棘手的问题。
此示例将运行一次并设置一个Date.fromISO方法-如果支持本机方法,它将使用它。
(function(){
var D= new Date('2011-06-02T09:34:29+02:00');
if(isNaN(D) || D.getUTCMonth()!== 5 || D.getUTCDate()!== 2 ||
D.getUTCHours()!== 7 || D.getUTCMinutes()!== 34){
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/);
for(var i= 0, L= day.length; i<L; i++){
day[i]= parseInt(day[i], 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;
}
// remove test:
alert('ISO Date Not correctly implemented');
}
else{
Date.fromISO= function(s){
return new Date(s);
}
// remove test:
alert('ISO Date implemented');
}
})()
// remove test
var D=Date.fromISO('2011-06-02T09:34:29+02:00');
alert(D.toUTCString())发布于 2011-06-03 22:28:21
如果你的字符串是一个ISO8601字符串,你可以把它传递给Date构造函数,然后得到一个Date对象:
var date = new Date('2011-06-02T09:34:29+02:00');根据http://dev.enekoalonso.com/2010/09/21/date-from-iso-8601-string/的说法,这在IE和其他平台上可能会有问题。出于兼容性考虑,建议您这样做:
function dateFromISO8601(isostr) {
var parts = isostr.match(/\d+/g);
return new Date(parts[0], parts[1] – 1, parts[2], parts[3], parts[4], parts[5]);
}
var myDate = dateFromISO8601("2011-06-02T09:34:29+02:00");
console.log(myDate);https://stackoverflow.com/questions/6228302
复制相似问题