2011-01-07 6 views
10

Sto riscontrando un problema utilizzando la nuova funzione Date() in Javascript. Safari mi sta dando un messaggio "Data non valida".new Date() che utilizza Javascript in Safari

Ho creato un breve esempio su jsbin.

Questo sembra funzionare su tutti gli altri browser, ma non su Safari. Qualche idea su come posso prendere il valore da un input (come 2011-01-03) e trasformarlo in un oggetto data, pur avendo funzionato correttamente in Safari?

Grazie mille!

risposta

41

Il comportamento di analisi della data su JavaScript è dipendente dall'implementazione, il formato ISO8601 è stato recentemente aggiunto alla Specifica 5a Edizione ECMAScript, ma questo non è ancora supportato da tutte le implementazioni.

ti consiglierei di analizzare manualmente, ad esempio:

function parseDate(input) { 
    var parts = input.match(/(\d+)/g); 
    return new Date(parts[0], parts[1]-1, parts[2]); 
} 

parseDate('2011-01-03'); // Mon Jan 03 2011 00:00:00 

Fondamentalmente la funzione di cui sopra corrisponde ogni parte la data e utilizza la data di costruzione, per costruire un oggetto data, notare che i mesi argomento deve essere basato su 0 (0 = Jan, 1 = Feb, ... 11 = Dec).

+0

Questo ha funzionato. Grazie per il chiarimento. – Dodinas

1

Mentre la soluzione di @ CMS è probabilmente superiore, ho trovato che l'utilizzo di Date.parse('2011-01-13') è anche una soluzione rapida e funzionante.

+2

Che sembra non funzionare in Safari (5.1.3), sto solo ottenendo 'NaN' come valore di ritorno. –

+0

Giusto. 'Date.parse' sembra essere specifico per l'implementazione. – n0nick

0

csnover ha qualche progressiva ISO 8601 codice per la valorizzazione disponibili su GitHub: https://github.com/csnover/js-iso8601/blob/master/iso8601.js

Compreso il suo codice dovrebbe fornire una soluzione temporanea, mentre il lavoro di squadra Safari verso un'implementazione più completa ES5.

+0

Questo codice non funziona su Safari –

2

La soluzione facile ho provato Scarica date.js da http://datejs.com/ includere nel file

data

poi var = Date.parse ('1970/01/12 00:00:00'); var formattedDate = date.toString ('aaaa-MM-gg');