2016-04-26 4 views
2

Dies ist das erste Mal, dass ich dieses Ergebnis bekomme.Warum das neue Datum so eingestellt ist wie heute, gibt gestern zurück

Ich benutze ein Telerik-Steuerelement RadDatePicker und ich erteile das Datum clientseitig.

Die Sache ist, dass die Steuerung nicht eine Zeichenfolge als Datum akzeptiert, aber ein Date-Objekt in Javascript

Also, mein Code, um das Datum in der Steuerung eingestellt ist

var radDateControl = $find("radDateControl"); 
radDateControl.set_selectedDate(new Date('2016-04-26')); 

Aber, Ich erkannte, dass das neue Datum das Datum wie gestern zurückgibt! Warum?

Es ist 5:58 Uhr Eastern Time (US & Kanada) gerade jetzt. Und wenn ich das tun

alert(new Date('2016-04-26')); 

Ich erhalte diese

Mon Apr 25 2016 20:00:00 GMT-0400 (Eastern Daylight Time) 

Warum und wie kann ich den Tag, wie von heute.


aktualisieren

Was schließlich habe ich es war. Ich hoffe, es kann anderen helfen.

var dateAsString = "2016-04-26"; 
var year = dateAsString.split('-')[0]; 
var month = dateAsString.split('-')[1]; 
var day = dateAsString.split('-')[2]; 
var date = new Date(Date.UTC(year, month - 1, day, 0,0,0)); 
date.setTime(date.getTime() + date.getTimezoneOffset() * 60 * 1000); 
rpdDateControl.set_selectedDate(date); 
+0

Dieses Datum wird eindeutig als UTC-Datum um Mitternacht geparst, daher erscheint es dir wie "gestern" in deiner Zeitzone der Eastern Time, wie Sie sind 4 Stunden hinter UTC (DST gegeben). – ManoDestra

+0

Sie können universelle Zeit anstelle der lokalen Zeit wie diese verwenden var utcDate = new Date (Date.UTC (2016, 4, 26, 0, 0, 0)); –

+0

Immer noch ein Date-Objekt mit der Zeitzone! Dies ist von der Chrome-Konsole: neues Datum (Date.UTC (2016,04,26,0,0,0)) Mi 25. Mai 2016 20:00:00 GMT-0400 (Eastern Daylight Time) –

Antwort

2

Das neu erstellte Datumsobjekt ist völlig korrekt. Der falsche Teil hier oder zumindest der Teil, der Sie verwirrt, ist Ihr Browser, der das Datumsobjekt in Ihre aktuelle Zeitzone zerlegt.

Wenn Sie ein neues Date-Objekt erstellen und es in eine Variable speichern ...

var date = new Date('2016-04-26'); 

... Sie bekommen, was Sie gefragt haben. Ein Date-Objekt, das den 26.04.2016 darstellt (in UTC).

Da Sie Ihren Browser verwenden, um Ihren Wert für Datumsobjekte abzurufen, wird der Wert nur durch Ihre lokale Zeitzone analysiert (in Ihrem Fall Eastern Daylight Time). Wenn Sie also das korrekte Datum verwenden möchten, das Sie zum Erstellen des neuen Datumsobjekts verwendet haben, können Sie .toUTCString() verwenden.

Ich weiß, Parsing Zeitzonen kann wirklich frustrierend sein. Um verschiedene Zeitzonen zu behandeln, können Sie Moment oder Moment Timezone ausprobieren. Ich schätze, Moment sollte zu Ihren Bedürfnissen passen, aber nur für die Fertigstellung.

+0

Es ist neugierig. Ich habe getestet, was du mir erzählt hast und es hat funktioniert, aber nicht in meiner Anwendung. Ich mache gerade das gleiche im Onload-Event des Fensters, aber mein variables Datum ist es noch gestern! Ich kann die Methode toUTCString() nicht verwenden, da das Steuerelement, das ich verwende, nur ein Date-Objekt und keine Zeichenfolge akzeptiert. –

+0

Können Sie den Code in dieser Geige auf der Entwicklerkonsole Ihres Browsers ausführen? Natürlich wäre die Ausgabe interessant. https://jsfiddle.net/os9raq9h/ – Aer0

+0

Ja, es ist "Di, 26 Apr 2016 00:00:00 GMT". Auch wenn ich den toUTCSTing nicht benutze, funktioniert es. Aber in meiner App nicht. Ich verwende VS2012, eingebettete IIS (ASP.NET Development Server) und Chrome. –

0

Verwenden Sie stattdessen Date.now(). Ich bin nicht sicher, warum die Schnur nicht funktioniert, aber das funktioniert sowieso.

+0

@ Aer0 ist eigentlich richtig, aber jeder Weg wird funktionieren. – Cameron637

0

Sie fragen Datum 26, aber mit Zeitzone Änderungen gibt es Ihnen zurück 2 Stunden, warum nicht nur alert(new Date()); und lassen Sie es geben Sie ihr aktuelles Datum ?, auch zu überprüfen, gehen Sie zum Server mit ssh und geben Sie Datum, wenn es ist nicht das Datum du bist, kannst du tzselect verwenden, um den Server zu deinem Datum zu ändern

Verwandte Themen