Ich habe den ganzen Tag meinen Kopf darüber geschlagen. Unabhängig davon, wie ich ein Javascript-Datum initialisiere, kann ich anscheinend kein gültiges Datumsobjekt erhalten ... Ich gehe davon aus, dass das Datum ungültig ist und nicht ordnungsgemäß funktioniert, indem ich es mit dem Chrome-Debugger überprüfe, der den Wert "__proto__: Ungültiges Datum" hat.

Ich habe Folgendes versucht:

var d = new Date();
var d = new Date('2012-10-08');
var d = new Date('2012-10-08 00:00:00');
var d = new Date(Date('2012-10-08'));
var d = new Date(Date.parse('2012-10-08'));
var d = new Date(2012,10,08);
var d = new Date("October 13, 1975 11:13:00");

Zusammen mit unzähligen anderen Versuchen.

Dies stellt ein Problem in iOS dar, bei dem ich versuche, Werte von diesen Datumsobjekten abzurufen, aber jede Funktion nur NaN zurückgibt. Ich würde es vorziehen, keine externen Bibliotheken verwenden zu müssen oder das JJJJ-MM-TT-Format in ein anderes Format konvertieren zu müssen, da ich versuche, dies mit einem HTML5-Eingabetyp = "Datum" mit minimalem Code für ein Mobiltelefon zum Laufen zu bringen Seite? ˅.

Im Wesentlichen läuft dies auf Folgendes hinaus: Welche Parameter machen ein Date-Objekt gültig?!

1
kand 10 Okt. 2012 im 02:46

3 Antworten

Beste Antwort

Vertrauen Sie dem Date-Objekt nicht, um Zeichenfolgen zu analysieren. Sie müssen dies manuell tun. Angesichts des Formats 2012-10-08,

function stringToDate(s) {
    s = s.match(/\d+/g);
    if (s) {
        return new Date(s[0], --s[1], s[2]);
    } 
}

Möglicherweise möchten Sie die Eingabezeichenfolge und das resultierende Datumsobjekt überprüfen. Oben wird nur die Konvertierung angezeigt.

Bearbeiten

Übrigens ist das einzige Zeichenfolgenformat, das in allen Browsern konsistent analysiert zu werden scheint, das US-spezifische month/date/year -Format. Es gibt keine Spezifikation, die seine Verwendung unterstützt, und es gibt auch keinen Grund zu der Annahme, dass Browser sie weiterhin unterstützen werden, außer Pragmatismus und "Legacy" -Gründen.

Für die überwiegende Mehrheit der Regionen wird der „03.02.2012“ als 2. März interpretiert, sodass der 3. Februar unerwartet sein kann.

Sobald ältere Versionen von IE nicht mehr verwendet werden (wahrscheinlich noch einige Jahre), sollte es sicher sein, das erweiterte ISO8601-Format gemäß ECMA-262 zu verwenden. Selbst Browser, die dies unterstützen, sind jedoch inkonsistent. z.B.

new Date('2011-02-29');

Firefox 15 gibt "Ungültiges Datum" zurück, IE 9 und Chrome 22 geben ein Datumsobjekt für den 1. März 2011 zurück.

4
RobG 9 Okt. 2012 im 23:55

Wenn Ihr Hauptanliegen das Parsen ist, schauen Sie sich Moment.js an, das dem Parsen selbst deutlich überlegen ist. (MEINER BESCHEIDENEN MEINUNG NACH)

1
Matt Johnson-Pint 9 Okt. 2012 im 23:19

Es stellt sich heraus, dass jQuery das Ereignis .change () in iOS nicht ordnungsgemäß an die Eingabe type = "date" bindet. Das Ereignis wurde in .blur () geändert und alles scheint jetzt zu funktionieren. Es scheint jedoch immer noch unmöglich zu sein, ein gültiges Datumsobjekt in Chrome zu erstellen ... ein Problem für einen anderen Tag.

Danke für die Hilfe an alle!

0
kand 10 Okt. 2012 im 15:59