2011-11-25 9 views
14

Ho una stringa di data "2011-11-24T09: 00: 27 + 0000" recuperata dall'API graph.facebook.javascript date.parse differenza in chrome e altri browser

Quando eseguo

var timestamp = Date.parse(facebookDate); 

in cromo. Ottengo un timestamp che si riferisce alla data! perfezionare!

Ma in OGNI altro browser principale ... ottengo "NaN" !!! ?

Sicuramente tutti questi browser utilizzano la stessa funzione di analisi javascript giusto?

Qualcuno può spiegare perché la stessa funzione javascript fornisce risultati diversi?

E qualcuno può anche dirmi come risolvere questo problema ...

Grazie in anticipo

Alex

+0

Vedere lo script aggiornato dal primo AGGIUNTA l'offset invece di sottrarlo. – mplungjan

+5

" Sicuramente tutti questi browser utilizzano lo stesso funzione di analisi javascript giusto? "No. Benvenuti allo sviluppo Web. – user123444555621

+0

@Alex: è SEMPRE +0000 perché in tal caso possiamo semplicemente cambiarlo in Z – mplungjan

risposta

10

Ecco una correzione per Firefox e IE/Safari (con l'aiuto di 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(); 
} 
.515.053.691,36321 milioni

Da MDN

JavaScript 1.8.5 nota

Un sottoinsieme di ISO 8601 data formattata stringhe può ora anche essere analizzato.

In alternativa, la stringa data/ora può essere nel formato ISO 8601. A partire da JavaScript 1.8.5/Firefox 4, è supportato un sottoinsieme di ISO 8601. Ad esempio, "2011-10-10" (solo data) o "2011-10-10T14: 48: 00 (data e ora) possono essere passati e analizzati. I fusi orari in date ISO non sono ancora supportati, ad esempio" 2011- 10-10T14: 48: 00 + 0200 "(con fuso orario) non fornisce ancora il risultato previsto

+1

Bello e funziona perfettamente Grazie mille – Warpling

+1

Grazie mille, mplungjan, tu salvato la mia giornata !!! – avenet

Problemi correlati