2010-03-19 9 views
13

¿Cómo está actualmente analizando las fechas de ISO8601, p. 2010-02-23T23: 04: 48Z en JavaScript?¿Javascript/EcmaScript3 admite el análisis de fecha ISO8601?

Algunos navegadores devuelven NaN (incluido Chrome) cuando se utiliza el código siguiente, aunque FF3.6 + funciona.

<html> 
<body> 
    <script type="text/javascript"> 
    var d = Date.parse("2010-02-23T23:04:48Z"); 
    document.write(d); 
</script> 
</body> 
</html> 

Puede probar esto aquí http://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_parse

Respuesta

2

En la pregunta del título: No forma nativa (como se ha probado :))

En ECMA- 262 (3/e) el único requisito para Date.parse[15.9.4.2] es la conversión de ida y vuelta a través de .toString() y .toUTCString() no cambiará el objeto Date, es decir,

Date.parse(x.toString()) == Date.parse(x.toUTCString()) == x 

y ambos .toString()[15.9.5.2] y .toUTCString()[15.9.5.42] son dependientes de la implementación, por lo que formato Date.parse puede analizar es totalmente sin especificar.

3

Como han mencionado otros, no está en la especificación de la 3ra edición. Sin embargo, está en la especificación de quinta edición y cito:

ECMAScript define un formato de intercambio de cadenas para fechas y horas basado en una simplificación del formato extendido ISO 8601. El formato es el siguiente: AAAA-MM-DDTHH: mm: ss.sssZ

lo que debe ser goteando en los navegadores pronto (IE9, Chrome 1, Firefox 4 es al menos algunos de los navegadores que soporten la norma ISO 8601 fechas). Si se desea implementar una solución, mientras tanto, es posible que desee optimizar para que su escritura se puede aprovechar el nativo si está disponible:

(function() 
{ 
    if (isNaN(Date.parse("2010-02-23T23:04:48Z"))) 
    { 
     var oldParse = Date.parse; 
     Date.parse = function (strTime) 
     { 
      // regex test strTime for ISO 8601, use oldParse if it isn't 
      // Use custom parser if it is. 
     } 
    } 
})(); 
Cuestiones relacionadas