Tage, Monate, Jahre von einem Datum in JavaScript subtrahieren
Lesezeit: 7 Minuten
Benutzer3378165
Kennt jemand eine einfache Möglichkeit, ein Datum (z. B. Heute) zu nehmen und X Tage, X Monate und X Jahre zurückzugehen?
Ich habe das versucht:
var date = new Date();
$("#searchDateFrom").val((date.getMonth() -1 ) + "https://stackoverflow.com/" + (date.getDate() - 6) + "https://stackoverflow.com/" + (date.getFullYear() - 1));
Aber ich habe ein negatives Datum bekommen, zum Beispiel war die Ausgabe heute:
3/-3/2015
Irgendwelche Ratschläge?
Vielen Dank.
date.get.... wird a zurückgeben Number und wenn Sie eine Zahl von einer anderen subtrahieren numberder Wert kann negativ sein (wenn der linke Wert kleiner ist). Ich würde Ihnen vorschlagen, ihn zu verwenden DateObj.set... Methoden und rufen Sie dann die jeweiligen Werte ab …
– Kunstseide
3. Mai 2016 um 11:23 Uhr
Sie reduzieren einfach die Werte von einer Zahl. Wenn Sie also 6 von 3 (Datum) subtrahieren, wird nur -3 zurückgegeben.
Sie müssen die Zeiteinheit im Datumsobjekt einzeln hinzufügen/entfernen
var date = new Date();
date.setDate( date.getDate() - 6 );
date.setFullYear( date.getFullYear() - 1 );
$("#searchDateFrom").val((date.getMonth() ) + "https://stackoverflow.com/" + (date.getDate()) + "https://stackoverflow.com/" + (date.getFullYear()));
getMonth() ist nullbasiert. Das heißt, es wird der falsche Monat angezeigt. Beispiel: 10 ist November.
– Toni
16. August 2017 um 20:51 Uhr
sagen wir einfach: getMonth() ist indexbasiert.
– GottZ
21. Mai 2020 um 13:55 Uhr
Aber getMinutes() zum Beispiel ist nicht indexbasiert. Es ist also fair zu sagen, dass die Inkonsistenz falsch ist, wie @Tony es ausdrückt.
– Mikemaccana
11. Mai um 15:21 Uhr
Wie andere gesagt haben, subtrahieren Sie von den numerischen Werten, die von Methoden wie zurückgegeben werden date.getDate(), müssen Sie diese Werte für Ihre Datumsvariable zurücksetzen. Ich habe unten eine Methode erstellt, die dies für Sie erledigt. Es erstellt ein Datum mit new Date() die mit dem aktuellen Datum initialisiert wird und dann Datum, Monat und Jahr gemäß den übergebenen Werten einstellt. Wenn Sie beispielsweise 6 Tage zurückgehen möchten, geben Sie so -6 ein var newdate = createDate(-6,0,0). Wenn Sie keinen Wert festlegen möchten, übergeben Sie eine Null (oder Sie können Standardwerte festlegen). Die Methode gibt das neue Datum für Sie zurück (getestet in Chrome und Firefox).
function createDate(days, months, years) {
var date = new Date();
date.setDate(date.getDate() + days);
date.setMonth(date.getMonth() + months);
date.setFullYear(date.getFullYear() + years);
return date;
}
FvB
Aktualisierung 2021:
MomentJS wurde durch LuxonJS ersetzt/verbessert, eine viel aktuellere und neuere Version. Sie finden es hier: https://moment.github.io/luxon/#/
Ich lasse den alten Beitrag erstmal stehen, da er anderen doch helfen könnte.
Alter Beitrag:
Ich würde empfehlen, die MomentJS-Bibliotheken zu verwenden. Sie machen alle Interaktionen mit Dates viel einfacher.
Wenn Sie Moment verwenden, wäre Ihr Code so einfach:
var today = moment();
var nextMonth = today.add('month', 1);
// note that both variables `today` and `nextMonth` refer to
// the next month at this point, because `add` mutates in-place
In JavaScript gibt die Funktion Date.getDate() den aktuellen Tag des Monats von 1-31 zurück. Sie subtrahieren 6 von dieser Zahl, und es ist derzeit der 3. des Monats. Dies bringt den Wert auf -3.
@Fvb Danke, ich habe den Leitfaden gelesen und es ist eine ausgezeichnete Bibliothek, danke für die Idee, sie zu verwenden.
– Benutzer3378165
3. Mai 2016 um 12:14 Uhr
Denken Sie daran, dass moment.js Ihrer App etwa 16.000 hinzufügt. Normalerweise keine große Sache. Aber wenn die Leistung entscheidend ist, ist das Festhalten an einfachen alten js für eine so kleine Berechnung billiger.
– Shanemgrey
29. Juli 2017 um 13:27 Uhr
Die aktuelle Version von moment (2.18.2 zum Zeitpunkt dieses Schreibens) warnt vor dieser Funktion. add/subtract(‘period’, number) ist veraltet und schlägt vor, stattdessen add/subtract(number, ‘period’) zu verwenden.
– Jamie M
19. September 2017 um 18:40 Uhr
Für alle, die hier im Jahr 2021 suchen, ist moment.js nicht mehr die beste Bibliothek. luxon.js ist sein Nachfolger, und es gibt viele andere moderne Alternativen.
– Elliotregan
15. November 2021 um 16:50 Uhr
N8allan
Dies ist eine reine Funktion, die ein übergebenes Startdatum annimmt und auf Phils Antwort aufbaut:
function deltaDate(input, days, months, years) {
return new Date(
input.getFullYear() + years,
input.getMonth() + months,
Math.min(
input.getDate() + days,
new Date(input.getFullYear() + years, input.getMonth() + months + 1, 0).getDate()
)
);
}
zB schreibt das Datum vor einem Monat in das Konsolenprotokoll:
Um diesen Test zu verwenden, benötigen Sie diese Funktion:
// get format date as 'YYYY-MM-DD'
export function formatDate(date: Date): string {
const d = new Date(date);
let month="" + (d.getMonth() + 1);
let day = '' + d.getDate();
const year = d.getFullYear();
if (month.length < 2) {
month="0" + month;
}
if (day.length < 2) {
day = '0' + day;
}
return [year, month, day].join('-');
}
kürzeres formatDate “hack”: function formatDate(date = new Date()) { return date.toLocaleString(‘sv’).substring(0,10); }
– loxx
18. März 2021 um 10:26 Uhr
Bei formatDate müssen Sie sich nicht verrückt machen toLocaleString. Verwenden toISOString.substring(0,10).
– Jonas Äppelgran
15. Juni 2021 um 8:03 Uhr
Wichtiger Hinweis: addDate(new Date('2021-07-31'), -3, 'months') gibt 2021-05-01 an, wenn es 2021-04-30 sein sollte.
– Jonas Äppelgran
15. Juni 2021 um 8:13 Uhr
Flimmer
Verwenden Sie die moment.js Bibliothek für Zeit- und Datumsverwaltung.
import moment = require('moment');
const now = moment();
now.subtract(7, 'seconds'); // 7 seconds ago
now.subtract(7, 'days'); // 7 days and 7 seconds ago
now.subtract(7, 'months'); // 7 months, 7 days and 7 seconds ago
now.subtract(7, 'years'); // 7 years, 7 months, 7 days and 7 seconds ago
// because `now` has been mutated, it no longer represents the current time
kürzeres formatDate “hack”: function formatDate(date = new Date()) { return date.toLocaleString(‘sv’).substring(0,10); }
– loxx
18. März 2021 um 10:26 Uhr
Bei formatDate müssen Sie sich nicht verrückt machen toLocaleString. Verwenden toISOString.substring(0,10).
– Jonas Äppelgran
15. Juni 2021 um 8:03 Uhr
Wichtiger Hinweis: addDate(new Date('2021-07-31'), -3, 'months') gibt 2021-05-01 an, wenn es 2021-04-30 sein sollte.
– Jonas Äppelgran
15. Juni 2021 um 8:13 Uhr
Vinayak Thatte
Ich habe eine einfachere Antwort, die tagelang perfekt funktioniert; für Monate sind es +-2 Tage:
let today=new Date();
const days_to_subtract=30;
let new_date= new Date(today.valueOf()-(days_to_subtract*24*60*60*1000));
Sie haben die Idee – für Monate mit 30 multiplizieren; aber das wird +-2 Tage sein.
12279800cookie-checkTage, Monate, Jahre von einem Datum in JavaScript subtrahierenyes
date.get....
wird a zurückgebenNumber
und wenn Sie eine Zahl von einer anderen subtrahierennumber
der Wert kann negativ sein (wenn der linke Wert kleiner ist). Ich würde Ihnen vorschlagen, ihn zu verwendenDateObj.set...
Methoden und rufen Sie dann die jeweiligen Werte ab …– Kunstseide
3. Mai 2016 um 11:23 Uhr