1784 Stimmen

Wie kann man Tage zum Datum hinzufügen?

Hinzufügen von Tagen zum aktuellen Date JavaScript verwenden? Verfügt JavaScript über eine eingebaute Funktion wie die von .NET AddDay() ?

1832voto

AnthonyWJones Punkte 182582

Sie können einen erstellen mit:-

Date.prototype.addDays = function(days) {
    var date = new Date(this.valueOf());
    date.setDate(date.getDate() + days);
    return date;
}

var date = new Date();

console.log(date.addDays(5));

Dadurch wird der Monat bei Bedarf automatisch hochgezählt. Zum Beispiel:

8/31 + 1 Tag wird zu 9/1 .

Das Problem bei der Verwendung von setDate direkt ist, dass es sich um einen Mutator handelt und so etwas am besten vermieden wird. Die ECMA hielt es für angebracht, die Date als veränderbare Klasse und nicht als unveränderliche Struktur.

6 Stimmen

Diese Lösungen gelten nicht für den Fall, dass Sie wissen müssen, ob sich die Uhrzeit nach dem days viele 24-Stunden-Tage. anpassen getDate / setDate / days à getTime / setTime / days * 24*60*60*1000 wenn Sie möchten, dass die Zeit die Sommerzeit erkennt.

30 Stimmen

Vereinfacht: Date.prototype.addDays=function(d){return new Date(this.valueOf()+864E5*d);};

57 Stimmen

@Duncan Sind Sie sicher, dass dies dasselbe ist wie das oben genannte? Dieser fügt einfach 24 Stunden hinzu, aber ein Tag ist nicht immer 24 Stunden . Ich schätze, die Frage ist, wie man den Datumsteil um 1 Tag erhöht, ohne den Zeitteil zu ändern.

316voto

Joel Coehoorn Punkte 377088
var today = new Date();
var tomorrow = new Date();
tomorrow.setDate(today.getDate()+1);

Seien Sie vorsichtig, denn das kann knifflig werden. Bei der Einstellung tomorrow funktioniert nur, weil sein aktueller Wert mit dem Jahr und dem Monat für today . Die Einstellung auf eine Datumsnummer wie "32" funktioniert jedoch normalerweise problemlos, um den nächsten Monat zu erreichen.

0 Stimmen

Ich habe einige Änderungen vorgenommen, aber Sie können sehen, dass diese Version noch vor seiner Antwort lag. Nun gut.

1 Stimmen

Ja? Aber was ist das? (ausgeführt am 31. März 2010): today = new Date(); tomorrow = new Date(); tomorrow.setDate(today.getDate()+1); alert(tomorrow.getMonth()); Sagt "3". alert(tomorrow); ist korrekt... Warum?

19 Stimmen

@sims Monat ist 0 indexiert. Monat 3 ist April

176voto

Jason Punkte 1733

Diese Antworten scheinen mir verwirrend zu sein, ich ziehe sie vor:

var ms = new Date().getTime() + 86400000;
var tomorrow = new Date(ms);

getTime() liefert uns Millisekunden seit 1970, und 86400000 ist die Anzahl der Millisekunden eines Tages. Folglich enthält ms Millisekunden für das gewünschte Datum.

Die Verwendung des Millisekunden-Konstruktors ergibt das gewünschte Datumsobjekt.

65 Stimmen

Bei dieser Lösung wird die Sommerzeit nicht berücksichtigt. So wird zum Beispiel das gleiche Datum 23 Stunden später angezeigt: new Date(new Date('11/4/2012').getTime() + 86400000)

8 Stimmen

@NoahMiller Das Problem, das Sie ansprechen, könnte ein Feature sein, kein Fehler! Das Hinzufügen von 24 Stunden pro Tag ist manchmal das Richtige, mit dem Ziel, die resultierende Zeit aufgrund der Sommerzeit zu kennen. Das Datum, das Ihr Beispiel liefert, hat einen Zeitwert von 23 Uhr am 4. November, was 24 Stunden später an diesem Tag ist. Der ursprüngliche Poster fragte nach der Datumszeit, was auf einen Wunsch nach korrekten Tageszeiten schließen lässt. Diese Antwort ist richtig, wenn Sie sich in dem Fall befinden, dass Ihr Ziel die Uhrzeit 24 Stunden später ist.

6 Stimmen

Ich stimme Noah zu, var d2 = new Date(d1.valueOf() + 24 * 60 * 60 * 1000) tut, was es sagt, fügt einen ganzen Tag im Wert von Ticks zu einem Datum.

154voto

sbrbot Punkte 5507

Meine einfache Lösung ist:

nextday=new Date(oldDate.getFullYear(),oldDate.getMonth(),oldDate.getDate()+1);

Bei dieser Lösung gibt es keine Probleme mit der Sommerzeit. Außerdem kann man einen beliebigen Offset für Jahre, Monate, Tage usw. hinzufügen/unterschreiben.

day=new Date(oldDate.getFullYear()-2,oldDate.getMonth()+22,oldDate.getDate()+61);

ist korrekter Code.

13 Stimmen

Hinweis: Dies setzt die Zeit auf 00:00:00 zurück (kann ein Problem sein oder auch nicht)

1 Stimmen

Am letzten Tag eines Monats funktioniert das nicht, wie Sie sagen. Das macht es an 12 Tagen im Jahr unbrauchbar. Klingt nach einem Albtraum bei der Fehlersuche!!!

7 Stimmen

No Drew, es ist für alle Tage im Jahr nutzbar. Sie können einen Datums-Offset größer als 31 oder einen Monats-Offset größer als 12 eingeben und diese Funktion wird ihn als Tag im nächsten Monat oder Monat im nächsten Jahr neu berechnen. Also zum Beispiel: nextday=new Date(oldDate.getFullYear(),oldDate.getMonth(),oldDate.getDate()+40); ist ein sehr guter Code.

82voto

Hasee Amarathunga Punkte 1605

Hier ist die Art und Weise, die verwenden, um Tage, Monate und Jahre für ein bestimmtes Datum in Javascript hinzufügen.

// To add Days
var d = new Date();
d.setDate(d.getDate() + 5);

// To add Months
var m = new Date();
m.setMonth(m.getMonth() + 5);

// To add Years
var y = new Date();
y.setFullYear(y.getFullYear() + 5);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X