Gibt es eine einfache Möglichkeit, ein olain JavaScript aufzunehmen? Date
(z. B. heute) und X Tage zurückgehen?
Wenn ich also zum Beispiel das Datum 5 Tage vor dem heutigen Tag berechnen möchte.
Gibt es eine einfache Möglichkeit, ein olain JavaScript aufzunehmen? Date
(z. B. heute) und X Tage zurückgehen?
Wenn ich also zum Beispiel das Datum 5 Tage vor dem heutigen Tag berechnen möchte.
Moment.js kaufen. Alle coolen Kids benutzen es. Es bietet mehr Formatierungsoptionen usw. Wo
var n = 5;
var dateMnsFive = moment(<your date>).subtract(n , 'day');
Optional! Konvertieren in JS Date obj für Angular Bindung.
var date = new Date(dateMnsFive.toISOString());
Optional! Format
var date = dateMnsFive.format("YYYY-MM-DD");
Einige der vorhandenen Lösungen waren zwar nahe dran, aber nicht ganz das, was ich wollte. Diese Funktion arbeitet sowohl mit positiven als auch mit negativen Werten und behandelt auch Grenzfälle.
function addDays(date, days) {
return new Date(
date.getFullYear(),
date.getMonth(),
date.getDate() + days,
date.getHours(),
date.getMinutes(),
date.getSeconds(),
date.getMilliseconds()
);
}
Ich habe diesen Prototyp für Date erstellt, damit ich negative Werte zum Subtrahieren von Tagen und positive Werte zum Addieren von Tagen übergeben kann.
if(!Date.prototype.adjustDate){
Date.prototype.adjustDate = function(days){
var date;
days = days || 0;
if(days === 0){
date = new Date( this.getTime() );
} else if(days > 0) {
date = new Date( this.getTime() );
date.setDate(date.getDate() + days);
} else {
date = new Date(
this.getFullYear(),
this.getMonth(),
this.getDate() - Math.abs(days),
this.getHours(),
this.getMinutes(),
this.getSeconds(),
this.getMilliseconds()
);
}
this.setTime(date.getTime());
return this;
};
}
Um es zu benutzen, kann ich also einfach schreiben:
var date_subtract = new Date().adjustDate(-4),
date_add = new Date().adjustDate(4);
Ich rechne gerne in Millisekunden. Also verwenden Date.now()
var newDate = Date.now() + -5*24*3600*1000; // date 5 days ago in milliseconds
und wenn Sie es formatiert haben möchten
new Date(newDate).toString(); // or .toUTCString or .toISOString ...
HINWEIS: Date.now()
funktioniert nicht in älteren Browsern (z. B. IE8, glaube ich). Polyfill hier .
@socketpair hat mich auf meine Schlampigkeit hingewiesen. Wie er/sie sagt: "Einige Tage im Jahr haben 23 Stunden, andere 25 Stunden aufgrund von Zeitzonenregeln".
Die obige Antwort führt zu Ungenauigkeiten bei der Sommerzeit, wenn Sie den LOKALEN Tag vor 5 Tagen in einer Zeitzone mit Sommerzeitänderungen berechnen wollen und Sie
Date.now()
gibt Ihnen die aktuelle LOCAL now Zeit, oder.toString()
die das lokale Datum zurückgibt und daher nicht mit dem Date.now()
Basisdatum in UTC.Es funktioniert jedoch, wenn Sie alle Berechnungen in UTC durchführen, z. B.
A. Sie möchten das UTC-Datum vor 5 Tagen von JETZT (UTC)
var newDate = Date.now() + -5*24*3600*1000; // date 5 days ago in milliseconds UTC
new Date(newDate).toUTCString(); // or .toISOString(), BUT NOT toString
B. Sie beginnen mit einem anderen UTC-Basisdatum als "jetzt", indem Sie Date.UTC()
newDate = new Date(Date.UTC(2015, 3, 1)).getTime() + -5*24*3600000;
new Date(newDate).toUTCString(); // or .toISOString BUT NOT toString
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.