javascript - formato - toisostring is not a function
Fecha de JavaScript ISO8601 (3)
IE 8 y versiones anteriores, y las versiones anteriores de los otros navegadores no implementan el formato de fecha ISO. Un problema es que algunos de los navegadores devuelven una fecha, en lugar de NaN, pero no la correcta.
Puedes escribir tu propio método, si quieres apoyarlos. La zona horaria es la parte difícil.
Este ejemplo se ejecutará una vez y establecerá un método Date.fromISO: si el método nativo es compatible, lo utilizará.
(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())
¿Cuál es la mejor manera de obtener un objeto de fecha de Javascript de una cadena como la siguiente:
2011-06-02T09:34:29+02:00 ?
Tengo problemas con la parte de la zona horaria (obviamente).
Si su cadena es una cadena ISO8601, puede pasarla al constructor de la fecha y obtener un objeto de fecha de vuelta:
var date = new Date(''2011-06-02T09:34:29+02:00'');
Sin embargo, según http://dev.enekoalonso.com/2010/09/21/date-from-iso-8601-string/ , esto podría tener problemas en IE y otras plataformas. Se recomienda hacer algo como esto para la compatibilidad:
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);
var myDate = new Date(''2011-06-02T09:34:29+02:00'');
alert(myDate);