2012-01-11 16 views
9

L'API di YouTube restituisce un oggetto JSON con una serie di video. Ogni oggetto video ha una data di pubblicazione formattata come "2012-01-11T20: 49: 59.415Z". Se inizializzo un oggetto Date Javascript utilizzando il codice sottostante, l'oggetto restituisce "Data non valida".Analisi di un'API di YouTube Data in Javascript

var dt = new Date("2012-01-11T20:49:59.415Z"); 

Lo sto utilizzando su iOS/mobile Safari, se questo fa la differenza.

Eventuali suggerimenti o idee su come creare un oggetto valido?

risposta

3

Ho finito per trovare una soluzione a http://zetafleet.com/blog/javascript-dateparse-for-iso-8601. Sembra che la data sia in un formato chiamato "ISO 8601". Nei browser precedenti (Safari 4, Chrome 4, IE 6-8), ISO 8601 non è supportato, quindi Date.parse non funziona. Il codice di riferimento del post sul blog collegato estende la classe Data corrente per sostenere ISO 8601.

0

Se è necessaria solo una parte della data (ad esempio se non ti interessa l'ora o il fuso orario) puoi semplicemente togliere quella parte della stringa della data.

+0

Sto provando a generare una data relativa, come "21 giorni fa" tirando i millisecondi dall'oggetto Date. –

+0

È facile quando si finisce con il rendering della data tramite lo script ISO 8601. Creare una nuova data globale analizzandola con l'oggetto data ISO 8601 e quindi sottrarre la "data registrata" dalla "data corrente" ... –

4

Provare a utilizzare JavaScript Date.parse(string) e il Date constructor che prende il numero di millisecondi dall'epoca. La funzione "parse" dovrebbe accettare una data ISO8601 valida su qualsiasi browser.

Ad esempio:

var d = new Date(Date.parse("2012-01-11T20:49:59.415Z")); 
d.toString(); // => Wed Jan 11 2012 15:49:59 GMT-0500 (EST) 
d.getTime(); // => 1326314999415 
+0

Questo non funziona nei browser più vecchi. Sto testando questo su iOS 4.2.1 e iOS 5.0.1. iOS 4 non funziona, mentre iOS 5 funziona. –

3
var dt = "2012-01-11T20:49:59.415Z".replace("T"," ").replace(/\..+/g,"") 
dt = new Date(dt);