var d = new Date();
d.setMonth(d.getMonth() - 3);
Dies funktioniert für Januar. Führen Sie dieses Snippet aus:
var d = new Date("January 14, 2012");
console.log(d.toLocaleDateString());
d.setMonth(d.getMonth() - 3);
console.log(d.toLocaleDateString());
Es gibt einige Einschränkungen ...
Ein Monat ist eine merkwürdige Sache. Wie definieren Sie 1 Monat? 30 Tage? Die meisten Leute werden sagen, dass vor einem Monat derselbe Tag des Monats bedeutet, an dem das Zitat des Vormonats benötigt wird . Aber mehr als die Hälfte der Zeit, also vor 31 Tagen, nicht vor 30. Und wenn heute der 31. des Monats ist (und es nicht August oder Dezember ist), existiert dieser Tag des Monats im Vormonat nicht.
Interessanterweise stimmt Google JavaScript zu, wenn Sie fragen, welcher Tag einen Monat vor einem anderen Tag liegt :
Es heißt auch, dass ein Monat 30.4167 Tage lang ist :
Ist also ein Monat vor dem 31. März der gleiche Tag wie ein Monat vor dem 28. März, 3 Tage früher? Dies hängt alles davon ab, was Sie unter "einen Monat vorher" verstehen. Sprechen Sie mit Ihrem Produktbesitzer.
Wenn Sie wie momentjs vorgehen und diese Fehler am letzten Tag des Monats korrigieren möchten, indem Sie zum letzten Tag des Monats wechseln, können Sie Folgendes tun:
const d = new Date("March 31, 2019");
console.log(d.toLocaleDateString());
const month = d.getMonth();
d.setMonth(d.getMonth() - 1);
while (d.getMonth() === month) {
d.setDate(d.getDate() - 1);
}
console.log(d.toLocaleDateString());
Wenn Ihre Anforderungen komplizierter sind, verwenden Sie etwas Mathematik und schreiben Sie Code. Du bist ein Entwickler! Sie müssen keine Bibliothek installieren! Sie müssen nicht aus dem Stackoverflow kopieren und einfügen! Sie können den Code selbst entwickeln, um genau das zu tun, was Sie brauchen!
Ich empfehle die Verwendung einer Bibliothek namens Moment.js.
Es ist gut getestet, funktioniert browserübergreifend und serverseitig (ich verwende es sowohl in Angular- als auch in Node-Projekten). Es hat große Unterstützung für Gebietsschemadaten.
http://momentjs.com/
.format()
Gibt eine Zeichenfolgendarstellung des im ISO 8601- Format formatierten Datums zurück . Sie können es auch mit einem benutzerdefinierten Datumsformat wie dem folgenden verwenden:.format('dddd, MMMM Do YYYY, h:mm:ss a')
quelle
Ein "Einzeiler" (in vielen Zeilen zum einfachen Lesen)), der direkt in eine Variable eingefügt werden soll:
quelle
Um die Sache wirklich einfach zu machen, können Sie DateJS verwenden, eine Datumsbibliothek für JavaScript:
http://www.datejs.com/
Beispielcode für Sie:
quelle
Dies sollte die Addition / Subtraktion behandeln, nur einen negativen Wert zum Subtrahieren und einen positiven Wert zum Addieren eingeben. Dies löst auch das monatliche Crossover-Problem.
quelle
Wenn die
setMonth
von gilly3 angebotene Methode nicht Ihren Anforderungen entspricht, sollten Sie Folgendes berücksichtigen:Kann für eine beliebige Zeitdauer verwendet werden, stellen Sie einfach die richtigen Vielfachen ein.
quelle
Date
Klasse ist und so sehr Date.js bevorzugt wird, modelliert sie zumindest einen milden proleptischen Kalender, der für den gelegentlichen Gebrauch gut genug ist.setTime()
?Ich mag die Einfachheit der Antwort von gilly3 , aber Benutzer werden wahrscheinlich überrascht sein, dass ein Monat vor dem 31. März der 3. März ist. Ich habe mich dafür entschieden, eine Version zu implementieren, die am Ende des Monats bleibt, also einen Monat vor dem 28., 29., 30. März. und 31 werden alle der 28. Februar sein, wenn es kein Schaltjahr ist.
quelle
Es gibt bereits eine elegante Antwort, aber ich finde, dass es schwer zu lesen ist, also habe ich meine eigene Funktion gemacht. Für meine Zwecke brauchte ich kein negatives Ergebnis, aber es wäre nicht schwer zu ändern.
quelle
quelle
Dies ist der kleinste und einfachste Code.
Deklarieren Sie die Variable mit dem aktuellen Datum. dann können wir nur mit der eingebauten Funktion setMonth ein 3-Monats-Backdatum erhalten.
quelle
In meinem Fall musste ich 1 Monat bis zum aktuellen Datum abziehen. Der wichtige Teil war die Monatszahl, daher ist es egal, an welchem Tag des aktuellen Monats Sie sich befinden, ich brauchte letzten Monat. Das ist mein Code:
1 Monat bis zum tatsächlichen Datum abziehen ist nicht korrekt. Deshalb setze ich an erster Stelle den ersten Tag des Monats (der erste Tag eines Monats ist immer der erste Tag) und an zweiter Stelle 1 Tag, der Sie immer an den letzten Monat sendet. Ich hoffe, dir zu helfen, Alter.
quelle
quelle
Übergeben Sie ein JS-Datumsobjekt und eine Ganzzahl, wie viele Monate Sie addieren / subtrahieren möchten.
monthsToAdd
kann positiv oder negativ sein. Gibt ein JS-Datumsobjekt zurück.Wenn Sie der
originalDateObject
31. März sind und -1 als übergebenmonthsToAdd
, ist Ihr Ausgabedatum der 28. Februar.Wenn Sie eine große Anzahl von Monaten, z. B. 36, vergehen, wird auch die Jahresanpassung ordnungsgemäß durchgeführt.
quelle
quelle
quelle