2013-05-29 8 views
12

Ich habe eine Eingabe auf meiner Webseite, dass ich das Datum einstellen kann, indem ich eine ISO-Zeichenkette erhalte und die ersten 10 Zeichen herausziehe.Wie parst du ein Datum von einer HTML5-Datumseingabe?

date = new Date(); 
dateInput.value = date.toISOString().substr(0,10); 

Das funktioniert perfekt. Mein Problem ist, dass wenn ich versuche, das Datum wieder heraus zu bekommen. Ich bekomme das Datum einen Tag frei.

var newDate = new Date(dateInput.value); 

Ich habe auch versucht, den folgenden Code für sie zu machen, aber es ist nicht immer richtig entweder

new Date (Date.parse (element.value) + 86400000)

Also meine Frage ist: Gibt es eine elegante Möglichkeit, das richtige Datum konsistent zu bekommen. Ich habe mich schon eine Weile umgeschaut, aber es scheint nicht viel Konsistenz mit der Datumsanalyse in Javascript zu geben.

+0

Woher kommt der Wert von 'Datum'? – Achrome

+0

denken, dass Sie eine gute Verwendung für momentjs.com finden – krasu

+0

date = new Date(); – duckbrain

Antwort

6

Es interpretiert das Datum als UTC, was es für die meisten Zeitzonen wie "gestern" aussehen lässt. Eine Lösung könnte darin bestehen, den Zeitzonen-Offset wieder in das Datum einzufügen, um ihn in Ihre lokale Zeitzone zu "konvertieren".

+1

Sie haben absolut Recht. Ich arbeite nicht mehr an diesem Projekt, aber das ist die richtige Antwort auf die Frage. – duckbrain

+0

@Duckbrain Deshalb [Ich fragte dich, in welcher Zeitzone du warst] (http://stackoverflow.com/questions/16825363/how-do-you-parse-a-date-from-an-html5-date-input/ 16825411 # comment24259218_16825411) ... – robertc

19

Wenn es ein tatsächlicher date-Eingang in einem unterstützenden Browser ist, dann wird es eine valueAsDate property haben. Es besteht keine Notwendigkeit, es zu analysieren.

+0

Das ist cool. Ich wusste nichts über diese Eigenschaft, aber es gibt mir das gleiche Problem. Das Datum ist einen Tag hinter dem, was ich in die Schachtel gelegt habe. Ich frage mich, ob es mein Browser ist. Ich verwende Chrome 27.0.1453.94 m. Ich habe es im Internet Explorer versucht, und es unterstützt nicht die Eigenschaft (Überraschung). – duckbrain

+1

Firefox unterstützt es überhaupt nicht. Schade. Ich brauche es nur, um auf Web-kit-basierten Browsern zu arbeiten. (iPhone und Android). – duckbrain

+0

@Duckbrain Sind Sie sicher, dass das Datum einen Tag zurückliegt? In welcher Zeitzone bist du? – robertc

1

Die Funktion getDate() von Javascript Datum ist Null basiert, nicht eine basiert. Hier ein Beispiel:

http://jsfiddle.net/R8Wub/3/

var enteredDate = document.getElementById('dateInput').valueAsDate; 
var result = "Day: " + enteredDate.getDate() + "<br/>" + 
    "Month: " + enteredDate.getMonth() + "<br/>" + 
    "Year: " + enteredDate.getFullYear(); 
document.getElementById('output').innerHTML = "Result is:<br/>" + result; 

ein Datum auszuwählen und den Knopf drücken. Beachten Sie, dass der Wert getDate() im Kalender weniger als der Tag des Monats ist, da er null ist.

+0

Ich bin mir bewusst, dass die Methode getDate() auf Null basiert, also ist getMonth(), aber ich rufe nicht beide auf, wenn ich den Wert in der Eingabe erhalte oder setze. Trotzdem danke. – duckbrain

0

Wie von Marty gesagt, ist das Problem der Unterschied zwischen der Darstellung der Zeitzone der Eingabe (UTC definiert durch WC3C) und der JS-Zeitzone (lokal). Die Lösung ist getTimezoneOffset (die in Minuten) und konvertiert alle Millisekunde:

var today = document.getElementById("myInputDate").valueAsDate; 
var tomorrow = new Date(today.valueOf() + 86400000 + (today.getTimezoneOffset() * 60000)); 

86400000 = Millisekunden eines Tages

today.getTimezoneOffset() * 60000 = timezoneoffset in Millisekunden

1
var newDate = new Date(dateInput.value + 'T00:00'); 

Dies gibt das richtige Datum in jeder Zeitzone.

Verwandte Themen