1784 Stimmen

Wie kann man Tage zum Datum hinzufügen?

Hinzufügen von Tagen zum aktuellen Date JavaScript verwenden? Verfügt JavaScript über eine eingebaute Funktion wie die von .NET AddDay() ?

12voto

Joshua Comeau Punkte 2176

Bei der vorgeschlagenen Lösung hatte ich Probleme mit der Sommerzeit.

Durch die Verwendung von getUTCDate / setUTCDate Stattdessen habe ich mein Problem gelöst.

// Curried, so that I can create helper functions like `add1Day`
const addDays = num => date => {
  // Make a working copy so we don't mutate the supplied date.
  const d = new Date(date);

  d.setUTCDate(d.getUTCDate() + num);

  return d;
}

12voto

Oli Punkte 1554

Danke Jason für deine Antwort, die wie erwartet funktioniert, hier ist eine Mischung aus deinem Code und dem praktischen Format von AnthonyWJones:

Date.prototype.addDays = function(days){
    var ms = new Date().getTime() + (86400000 * days);
    var added = new Date(ms);
    return added;
}

6 Stimmen

Sie berücksichtigt nicht die Sommerzeit, wenn ein Tag mehr oder weniger als 86400000 Sekunden hat, und kann zu einem logischen Fehler (Programmfehler) in Ihrem Code führen.

0 Stimmen

Manchmal ist das notwendig. Die eBay-API hat x-Tage-Auktionen, die 24 Stunden basieren, so dass Ihr Artikel zu einer anderen Zeit endet, als er hochgeht, wenn sich der Sommerzeitstatus mitten in der Auktion ändert. In diesem Fall müssen Sie diese Art von Funktion verwenden, um logische Fehler zu vermeiden.

12voto

Dila Gurung Punkte 1578

So einfach ist das:

new Date((new Date()).getTime() + (60*60*24*1000));

5 Stimmen

Dies fügt zwar UTC-Tage hinzu, verwendet aber lokale Methoden und lässt keine lokalen Tage zu, die nicht 24 Stunden lang sind, was vorkommt, wenn sich die Zeitzonenverschiebung ändert (z. B. bei Ein- und Ausstieg aus der Sommerzeit).

12voto

Alexander Behling Punkte 528

Warum so kompliziert?

Nehmen wir an, Sie speichern die Anzahl der hinzuzufügenden Tage in einer Variablen namens days_to_add.

Dann sollte dieser Kurzfilm genügen:

calc_date = new Date(Date.now() +(days_to_add * 86400000));

Mit Date.now() erhalten Sie den aktuellen Unix-Zeitstempel in Millisekunden und fügen dann so viele Millisekunden hinzu, wie Sie Tage addieren möchten. Ein Tag ist 24h 60min 60s*1000ms = 86400000 ms oder 864E5.

0 Stimmen

Das funktioniert! Und es ist tatsächlich intelligent und kurz. Ich habe getestet, ob man 30 Tage oder 45 Tage hinzufügt, und ob es richtig berechnet und die richtigen Monate überspringt, und es scheint in Ordnung zu sein. Die Art und Weise, wie das gemacht wird, ist genau das, wonach ich gesucht habe, und die Verwendung der "out of the box" js Datumsfunktion ist der richtige Weg, es nicht zu verkomplizieren, sondern einfach das zu verwenden, was bereits existiert! Daumen hoch! Danke!

11voto

Todd Punkte 5143

Ich weiß, das ist alt, aber manchmal gefällt mir das:

function addDays(days) {
    return new Date(Date.now() + 864e5 * days);
}

3 Stimmen

Das macht für mich den meisten Sinn. Sie ist einfach, elegant und hat keine Probleme, die sich über Monate/Jahre hinziehen.

1 Stimmen

Die einfachste Antwort wird präsentiert. Darauf aufbauend würde der Prototyp "addDays" wie folgt aussehen: Date.prototype.addDays = function(days) {return new Date(this.getTime() + (864e5 * days));};

1 Stimmen

Nicht jeder Tag hat 24 Stunden, das gilt auch für die Sommerzeit und die Schaltsekunden.

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