Wie berechne ich das Datum in JavaScript drei Monate vor heute?
Lesezeit: 5 Minuten
KeenUser
Ich versuche, ein Datum zu bilden, das 3 Monate vor dem aktuellen Datum liegt. Ich erhalte den aktuellen Monat durch den folgenden Code
var currentDate = new Date();
var currentMonth = currentDate.getMonth()+1;
Könnt ihr mir die Logik zur Berechnung und Bildung eines Datums (ein Objekt der Date Datentyp), wenn man bedenkt, dass, wenn der Monat Januar (1) ist, 3 Monate vor dem Datum Oktober (10) wäre?
gilly3
var d = new Date();
d.setMonth(d.getMonth() - 3);
Das 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 Vorbehalte …
Ein Monat ist eine merkwürdige Sache. Wie definierst du 1 Monat? 30 Tage? Die meisten Leute werden sagen, dass vor einem Monat derselbe Tag des Monats im Vormonat bedeutet Zitat benötigt. Aber mehr als die Hälfte der Zeit, das ist 31 Tage her, nicht 30. Und wenn heute der 31. des Monats ist (und es nicht August oder Dezember ist), existiert dieser Tag des Monats nicht im Vormonat.
Ist also ein Monat vor dem 31. März derselbe Tag wie ein Monat vor dem 28. März drei Tage früher? Das hängt alles davon ab, was Sie mit “einen Monat vorher” meinen. Sprechen Sie mit Ihrem Product Owner.
Wenn Sie es wie momentjs tun 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. Sie sind Entwickler! Sie müssen keine Bibliothek installieren! Sie müssen nicht von Stackoverflow kopieren und einfügen! Sie können den Code selbst entwickeln, um genau das zu tun, was Sie brauchen!
var aktuellesDatum = neues Datum(); var aktuellerMonat = aktuellesDatum.getMonth() -12; var pastDate = neues Datum (2011, aktueller Monat, 01); alert(pastDate); das hat funktioniert, überprüft mit 12 Monaten
– KeenUser
29. Oktober 2011 um 6:09 Uhr
Das ist eine kranke Antwort … Woher bekomme ich 2012,0,15? Einen bestehenden Monat umwandeln -1 ?
– Alex G
8. August 2015 um 2:56 Uhr
@AlexG – Wenn Sie neu in der JavaScript-Datumsanalyse sind, kann ich sehen, wie verwirrend mein kurzes Beispiel wäre. JavaScript drückt Monate als nullbasiert aus, wobei Januar null ist. Um solche Verwirrung zu vermeiden, insbesondere da dies nichts mit der Frage oder meiner Antwort zu tun hat, habe ich meine Demo aktualisiert, um das Datum aus einer Zeichenfolge zu erhalten, was intuitiver sein sollte.
– gilly3
10. August 2015 um 0:27 Uhr
Ich weiß, das ist alt, aber wenn das Datum der 31. März ist und Sie mit dieser Methode einen Monat subtrahieren, ist das Ergebnis der 2. März. jsfiddle.net/atamata/rvumf7dg
– atamata
20. Januar 2017 um 13:10 Uhr
@atamata – Ja, das ist seltsam, aber vorhersehbar und erwartet. 31 Tage nach dem Ende des Vormonats für März ist der 31. März, aber für Februar ist es der 2. März. Wenn Sie ab dem Ende des Monats zählen möchten, müssen Sie dafür einen benutzerdefinierten Code schreiben.
– gilly3
20. Januar 2017 um 19:12 Uhr
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 eine großartige Unterstützung für lokale Daten.
var threeMonthsAgo = moment().subtract(3, 'months');
console.log(threeMonthsAgo.format()); // 2015-10-13T09:37:35+02:00
.format() gibt eine Zeichenfolgendarstellung des Datums zurück, das in formatiert ist ISO 8601 Format. Sie können es auch mit einem benutzerdefinierten Datumsformat wie diesem verwenden:.format('dddd, MMMM Do YYYY, h:mm:ss a')
Dies sollte Addition/Subtraktion handhaben, geben Sie einfach einen negativen Wert zum Subtrahieren und einen positiven Wert zum Addieren ein. Dies löst auch das Problem der Monatsüberkreuzung.
function monthAdd(date, month) {
var temp = date;
temp = new Date(date.getFullYear(), date.getMonth(), 1);
temp.setMonth(temp.getMonth() + (month + 1));
temp.setDate(temp.getDate() - 1);
if (date.getDate() < temp.getDate()) {
temp.setDate(date.getDate());
}
return temp;
}
Niet the Dark Absol
Wenn die setMonth Die von gilly3 angebotene Methode ist nicht das, wonach Sie suchen, bedenken Sie Folgendes:
var someDate = new Date(); // add arguments as needed
someDate.setTime(someDate.getTime() - 3*28*24*60*60);
// assumes the definition of "one month" to be "four weeks".
Kann beliebig lange verwendet werden, stellen Sie einfach die richtigen Vielfachen ein.
Austin
Mach das
let currentdate = new Date();
let last3months = new Date(currentdate.setMonth(currentdate.getMonth()-3));
Javascripts setMonth Methode kümmert sich auch um das Jahr. Beispielsweise wird der obige Code zurückgegeben 2020-01-29 wenn aktuellesDatum eingestellt ist als new Date("2020-01-29")
Der Aufruf an currentdate.setMonth() Änderungen currentdateso dass keine Zuweisung erforderlich ist last3months zu einem neuen Date bezogen auf currentdate. Ebenfalls, currentdate ist nicht mehr das ‘aktuelle Datum’. Nur eine Anmerkung, die Sie bei der Verwendung dieser Lösung beachten sollten. 🙂
– Philipp
10. Dezember 2021 um 14:39 Uhr
Ja, es ist Call-by-Reference und ändert die Variable currentdate
– Spock
12. April um 8:25 Uhr
12992400cookie-checkWie berechne ich das Datum in JavaScript drei Monate vor heute?yes