2011-11-25 20 views
14

Tengo una cadena de fecha "2011-11-24T09: 00: 27 + 0000" extraída de graph.facebook API.javascript date.parse difference en cromo y otros navegadores

Cuando corro

var timestamp = Date.parse(facebookDate); 

en cromo. ¡Obtengo una marca de tiempo que se relaciona con la fecha! ¡Perfecto!

Pero en CADA otro navegador importante ... ¡¡¡consigo "NaN" !!! ?

Seguramente todos estos navegadores usan la misma función javascript parse ¿verdad?

¿Alguien puede explicar por qué la misma función de JavaScript da resultados diferentes?

Y también puede alguien decirme cómo solucionar este problema ...

Gracias de antemano

Alex

+0

Consulte la secuencia de comandos actualizada ya que la primera AÑADIÓ el desplazamiento en lugar de restarlo. – mplungjan

+5

" Sin duda, todos estos navegadores usan el mismo función javascript parse ¿no? "No. Bienvenido a Desarrollo web. – user123444555621

+0

@Alex - SIEMPRE es +0000 porque entonces podemos cambiarlo a Z – mplungjan

Respuesta

10

Aquí es una solución para Firefox e IE/Safari (con la ayuda de JavaScript: Which browsers support parsing of ISO-8601 Date String with Date.parse ):

DEMO

var noOffset = function(s) { 
    var day= s.slice(0,-5).split(/\D/).map(function(itm){ 
    return parseInt(itm, 10) || 0; 
    }); 
    day[1]-= 1; 
    day= new Date(Date.UTC.apply(Date, day)); 
    var offsetString = s.slice(-5) 
    var offset = parseInt(offsetString,10)/100; 
    if (offsetString.slice(0,1)=="+") offset*=-1; 
    day.setHours(day.getHours()+offset); 
    return day.getTime(); 
} 

De MDN

JavaScript 1.8.5 nota

Un subconjunto de la norma ISO 8601 cadenas de fecha formateada ahora también puede ser analizada.

Alternativamente, la cadena de fecha/hora puede estar en formato ISO 8601. Comenzando con JavaScript 1.8.5/Firefox 4, se admite un subconjunto de ISO 8601. Por ejemplo, "2011-10-10" (solo fecha) o "2011-10-10T14: 48: 00 (fecha y hora) pueden pasarse y analizarse. Las zonas horarias en fechas ISO aún no son compatibles, por ejemplo," 2011- 10-10T14: 48: 00 + 0200 "(con zona horaria) no da el resultado esperado.

+1

Hermoso y funciona perfectamente. Muchas gracias. – Warpling

+1

Muchas gracias mplungjan, usted salvó mi día !!! – avenet

Cuestiones relacionadas