880 Stimmen

Wie subtrahiert man Tage von einem einfachen Datum?

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.

29voto

Kentonbmax Punkte 890

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");

18voto

Joel Fillmore Punkte 5798

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()
    );
}

17voto

vaibhavmaster Punkte 589

Ohne die zweite Variable zu verwenden, können Sie 7 für durch die zurückliegenden x Tage ersetzen:

let d=new Date(new Date().getTime() - (7 * 24 * 60 * 60 * 1000))

15voto

Rob Dawley Punkte 244

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);

13voto

poshest Punkte 3838

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 .

UPDATE Juni 2015

@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

  • (fälschlicherweise) annehmen, dass Date.now() gibt Ihnen die aktuelle LOCAL now Zeit, oder
  • utilice .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.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