2009-12-06 7 views
9

Esto es probablemente algo fácil, pero estoy un poco confundido sobre cómo hacer esto. ¿Cómo puedo, utilizando JavaScript, analizar sólo el tiempo de la siguiente cadena ISO 8601 fecha:Usar JavaScript para analizar el tiempo

2009-12-06T17:10:00 

En otras palabras, con la cadena anterior, me gustaría de salida:

5:10 PM 

Cualquier orientación/tutoriales sobre esto sería genial.

+1

No quise cerrarlo como un duplicado de esa pregunta: '( – Ryan

+0

) No estoy de acuerdo con que este sea un duplicado exacto de la pregunta mostrada. Analizar las marcas de tiempo ISO es una preocupación diferente de analizar la entrada humana. – Andrew

Respuesta

0

string.slice(11,16) devolverá 17:10. A partir de ahí (posiblemente usando slice de maneras más interesantes y emocionantes) debería ser bastante simple de obtener en formato de 24 horas.

0

Esto se conoce como formato ISO 8601. Mochikit viene con una función para analizarlo,

http://mochikit.com/doc/html/MochiKit/DateTime.html

Usted puede obtener un objeto Date como este,

timestamp = isoTimestamp("2009-12-06T17:10:00"); 

Sólo tienes que copiar la función si no desea que el uso Mochikit.

0

Analizar la marca de tiempo ISO es fácil, formatear el tiempo de una manera culturalmente apropiada es difícil (5:10 PM no es apropiado para todas las configuraciones regionales) Muchos kits de herramientas proporcionan rutinas para la parte ISO, e incluso es parte de la nueva ECMAScript 5 estándar; solo un par hace la última parte, sin embargo.

Puede intentar dojo.date.stamp.fromISOString y dojo.date.locale.format.

Creo que Date-JS también puede formatear los tiempos.

11

Chrome & Firefox: El constructor de fecha de JavaScript estándar toma la cadena de fecha ISO 8601. Por ejemplo:

var sampleDate = new Date("2010-03-07T02:13:46Z");

devuelve este objeto Date: "Sun Mar 07 2010 13:13:46 GMT + 1100 (AUS Hora de verano)"

Esto no funciona en IE (incluyendo la última IE 9)

Aquí es una solución multi-navegador por Paul Sowden en http://delete.me.uk/2005/03/iso8601.html:

Date.prototype.setISO8601 = function (string) { 
    var regexp = "([0-9]{4})(-([0-9]{2})(-([0-9]{2})" + 
     "(T([0-9]{2}):([0-9]{2})(:([0-9]{2})(\.([0-9]+))?)?" + 
     "(Z|(([-+])([0-9]{2}):([0-9]{2})))?)?)?)?"; 
    var d = string.match(new RegExp(regexp)); 

    var offset = 0; 
    var date = new Date(d[1], 0, 1); 

    if (d[3]) { date.setMonth(d[3] - 1); } 
    if (d[5]) { date.setDate(d[5]); } 
    if (d[7]) { date.setHours(d[7]); } 
    if (d[8]) { date.setMinutes(d[8]); } 
    if (d[10]) { date.setSeconds(d[10]); } 
    if (d[12]) { date.setMilliseconds(Number("0." + d[12]) * 1000); } 
    if (d[14]) { 
     offset = (Number(d[16]) * 60) + Number(d[17]); 
     offset *= ((d[15] == '-') ? 1 : -1); 
    } 

    offset -= date.getTimezoneOffset(); 
    time = (Number(date) + (offset * 60 * 1000)); 
    this.setTime(Number(time)); 
} 

Uso:

var date = new Date(); 
date.setISO8601("2005-03-26T19:51:34Z"); 

Si realiza mucha manipulación de fecha y hora en JavaScript, también puedo sugerir que consulte algunas bibliotecas de JS como MomentJS. Maneja algunas cosas comunes como el análisis de fechas, el formateo y el cálculo de la diferencia entre dos fechas y tiene soporte para múltiples localizaciones.

Cuestiones relacionadas