2011-01-07 7 views
10

Ich habe ein Problem mit der neuen Funktion Date() in Javascript. Safari gibt mir die Nachricht "Ungültiges Datum".neues Datum() mit Javascript in Safari

Ich habe ein kleines Beispiel unter jsbin erstellt.

Dies scheint in allen anderen Browsern zu funktionieren, aber nicht in Safari. Irgendwelche Ideen, wie ich den Wert einer Eingabe (wie 2011-01-03) nutzen und in ein Datumsobjekt umwandeln kann, während es in Safari funktioniert?

Vielen Dank!

Antwort

41

Das Datum Parsing Verhalten auf JavaScript ist implementierungsabhängig, das ISO8601-Format wurde vor kurzem zu der Spezifikation ECMAScript 5th Edition hinzugefügt, aber dies wird noch nicht von allen Implementierungen unterstützt.

Ich würde Ihnen empfehlen, es manuell zu analysieren, zum Beispiel:

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 

Grundsätzlich ist die obige Funktion jedes Datumsteil entspricht, und verwendet den Date-Konstruktor, ein Datum Objekt zu bauen, beachten Sie, dass die Monate Argument muss 0-basiert sein (0 = Jan, 1 = Feb, ... 11 = Dez).

+0

Das hat es getan. Danke für die Klarstellung. – Dodinas

1

Obwohl die Lösung von @ CMS wahrscheinlich besser ist, habe ich festgestellt, dass die Verwendung von Date.parse('2011-01-13') auch eine schnelle, funktionierende Lösung ist.

+2

Das scheint in Safari (5.1.3) nicht zu funktionieren, ich bekomme nur 'NaN' als Rückgabewert. –

+0

Rechts. 'Date.parse' scheint umsetzungsspezifisch zu sein. – n0nick

0

csnover hat einige progressiven Code Datum Erweiterung ISO 8601 auf GitHub: https://github.com/csnover/js-iso8601/blob/master/iso8601.js

seinen Code Einschließlich sollte eine temporäre Lösung, während der Safari Teamarbeit hin zu einer vollständigeren ES5 Umsetzung.

+0

Dieser Code funktioniert nicht in Safari –

2

Die einfache Lösung, die ich herunterladen date.js von http://datejs.com/ versucht Fügen Sie in Ihrer Datei

dann var date = Date.parse ('1970.01.12 00.00.00'); var formatiertDatum = Datum.Zeichenfolge ('JJJJ-MM-TT');

Verwandte Themen