Frage

Die folgende Skript gibt 20 statt 21!

var d = new Date("2010/03/21");
document.write(d.getDate());

Was mache ich falsch? Ist das ein JavaScript Bug?

War es hilfreich?

Lösung

Date.parse Methode ist implementierungsabhängig (new Date(string) entspricht Date.parse(string) ).

Während dieses Format auf modernen Browsern verfügbar sein wird, können Sie nicht zu 100% sicher sein, dass der Browser genau das gewünschte Format interpretiert.

Ich würde Ihnen empfehlen, Ihre Zeichenfolge zu manipulieren, und verwenden Sie den Date-Konstruktor mit dem Jahr, Monat und Tag Argumente:

// parse a date in yyyy-mm-dd format
function parseDate(input) {
  var parts = input.match(/(\d+)/g);
  // new Date(year, month [, date [, hours[, minutes[, seconds[, ms]]]]])
  return new Date(parts[0], parts[1]-1, parts[2]); // months are 0-based
}

Andere Tipps

Es ist eine Sommerzeit-Ausgabe zu speichern, weil Date () Ortszeit verwendet.

Ich lebe in Brasilien und Oct-21-2012 ist der Beginn Tageslicht in den meisten meines Land spart Zeit, so dass lokale Termine im Oktober-21-2012 zwischen 0: 0 und 1: 0 nicht in Brasilien gibt!

Kommentar Einige Leute hier, dass es funktioniert. Es geschieht, weil die richtige oder falsche Stunde Rückkehr ist abhängig von dem lokalen Benutzer Land.

Siehe auch: http://www.timeanddate.com/news/ Zeit / Brasilien-dst-2012.html

In Brasilien im Jahr 2012 Java, dass DST beginnt am Oct-14 denkt (es tatsächlich nach 1 Woche später beginnen)

var dt = new Date(2012,9,14); 
alert(dt.getHours());

erzeugt 1 und

Siehe auch: http://www.timeanddate.com/time/dst/2013. html

Die Lösung ist die Verwendung UTC (Coordinated Universal Time) Zeit, weil es keine Sommer Änderungen und Sie verwenden eine Art der abstrakten Zeit. In den meisten praktischen Anwendungen gibt es kein Problem.

var dt = new Date( Date.UTC(2012, 9, 21, 8, 5, 12));
alert( (dt.getUTCMonth()+1) + '/' + dt.getUTCDate() + '/' + 
        dt.getUTCFullYear() + " " + dt.getUTCHours()+ ':' + 
        dt.getUTCMinutes() + ':' + dt.getUTCSeconds() );

es ist einfacher, wenn jemand nicht Stunden, Minuten und Sekunden verwendet, legen Sie einfach einen Dummy-Stunden-Wert größer oder gleich als 1 ist, wie ich oben gezeigt habe.

Jede Chance, es ist das String-Argument als UTC und das resultierende Date Objekt als lokale Zeit zu behandeln, oder umgekehrt? Das könnte werfen Sie es weg. Vergleichen d.getDate() zu d.getUTCDate().

Ich habe auch eine Abweichung von einem Tag durch getDate(), aber ich stelle fest, dass getUTCDate() den erwarteten Wert zurückgibt. Das Problem wurde in FF 3.6.12 gesehen, aber der gleiche Code auf Chrome laufen war in Ordnung.

Ihr Debug-Code:

var date="2010-11-04";
alert(date);
var d = new Date(date)
alert(d.toDateString()+": "+ d.getDate()+" UTC "+d.getUTCDate());

Das gab einen Ausgang (FireFox):

  

Mi 3. November 2010: 3 UTC 4

Chrome ist in Ordnung. So etwas ist irgendwo - vielleicht ein Fehler, aber eher eine Zeitzone / UTC Parameter Problem. Erinnert mich an, wo PHP date() 23 Stunden an einem Tag zurück, wenn die Zeitzone an diesem Tag usw. Buggered geändert, wenn ich weiß, was es ist, aber.

Ich schrieb den folgenden Code in meinem Browser-Adressleiste und das Ergebnis war 21

javascript:alert(new Date("2010/03/21").getDate())

Es gibt nicht so etwas wie ein Bug Javascript, da es viele Javascript-Implementierungen ist, so dass Sie auf eine bestimmte Implementierung beziehen werden sollen.

Die Umsetzung I getestet wurde Chrome 4.1.249. Was ist Ihr?

Es ist die Zeitzone, die hier eine wichtige Rolle spielt. Die Date() Funktion wird Ihre Zeitzone zu dem Zeitpunkt hinzufügen, die Sie als Eingabe geben. Zum Beispiel: Ich gab die Eingabe wie folgt aus:

alert(new Date("2018-09-15"));

Das Ergebnis ist für mich: Sa 15. September 2018 05.30.00 GMT + 0530 (Indien Normalzeit)

Die Zeitzone +05:30 meine Eingabe der Zeit hinzugefügt wird (können Sie in der obigen result..05 sehen: 30: 00 bis zum Tag hinzugefügt wird nun, was ich sage ist, wenn Sie in der Zeitzone weniger sind als. 0 [Länder wie Brasilien, Mexiko, Chile, etc ... mit Zeitzone weniger als 0] dann wird es zu Ihrer Datumseingabe hinzufügen (zB: Zeitzone UTC-05:. 00 es wird subtrahieren -5: 00 ab dem Datum gegeben.

VahidN , haben Sie das Ergebnis 20, weil Sie in der Zeitzone von weniger als 0 (-1è :00` usw. ..)

Die Lösung ist Zurücksetzen Ihrer Zeitzone 0 . Wie folgt aus:
    Datum ( "2010-03-21T00: 00: 00").

Getestet habe ich diesen Code in Firefox 3.6 und IE 8:

<script type="text/javascript">

var d = new Date("2010/03/21");
document.write(d.getDate());

</script> 

Es ist der richtige Zeitpunkt zeigt: 21

Für weitere Informationen sehen Sie: JavaScript Date Objekt

Sie können auch lesen Sie über JavaScript Kompatibilität Überlegungen bei Wikipedia .

http://jsbin.com/aqoki3/edit - hier mit dem Code geschrieben Sie mich 21. So ist es nicht JS Fehler. Vielleicht ist es Fehler in Ihrem Browser-Implementierung (JS).
So richtig init Ihr Datum var Verwendung new Date(year, month, date [, hour, minute, second, millisecond ]) ( https: //developer.mozilla. org / en / Core_JavaScript_1.5_Reference / Objekte / Datum ). So können Sie sicher sein, dass Tag 21 becouse Sie implizit es auf 21 gesetzt.

Ich erhalte das gleiche Datum (21) in FIRFOX, Safari, Chrome, Opera und Internet Explorer, ob ich die Zeichenfolge „2010.03.21“ oder die Integer-Datum Argumente verwenden (2010,2,21).

Ich bin mit einem Windows-Rechner und neue Versionen des Browser -

Sie können testen, um zu sehen, ob Ihr Kunde ein anderes Datum aus dem String parst, die der einzige Ort ist, mich für ein Problem zu sehen.

if(new Date("2010/03/21")- new Date(2010,2,21)){
alert(new Date("2010/03/21"));
} 

Stellen Sie sicher, dass die Anzahl Monat den Sie verwenden, ist -1, wenn Sie im Juni suchen, müssen Sie (6-1) für den Monat tun, wenn erstellen

   var date_obj = new Date(y,(m-1),d);

Wenn gibt neues Datum ein String Datum, die Notwendigkeit Zeichenfolge, die die Zeitzone zu schließen, sonst wird es anders als andere vom Browser interpretiert werden (wegen der verschiedenen JavaScript-Implementierungen) und von Maschine zu anderen (aufgrund der Differenz der lokalen Zeitzone )

new Date('2017-07-31T10:00:00-0500');

statt

new Date('2017-07-31T10:00:00');

Sie cant't Datum erstellen Objekt von String-Argument zeigt, wie Datum übergeben.

Wie diese Weise erstellen.

var str_date = "2010/03/21";
var date = new Date();
var date_elements = str_date.split("/");

date.setYear(date_elements[0]);
date.setMonth(date_elements[1]);
date.setDay(date_elements[2]);

alert(date.toString);

gibt Aufmerksamkeit auf date.toString Methode. es gibt vollständige Datum String. date.getDate werden Sie nur Tag an diesem Tag.

für weitere Informationen von Date-Objekt findet www.w3school.com

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top