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() ?

23voto

NicoESIEA Punkte 436

Die einfachste Antwort ist, vorausgesetzt, es muss 1 Tag zum aktuellen Datum hinzugefügt werden:

var currentDate = new Date();
var numberOfDayToAdd = 1;
currentDate.setDate(currentDate.getDate() + numberOfDayToAdd );

Ich werde Ihnen Zeile für Zeile erklären, was dieser Code bewirkt:

  1. Erstellen Sie die aktuelles Datum Variable mit dem Namen currentDate. Standardmäßig weist "new Date()" der Variablen automatisch das aktuelle Datum zu.
  2. Erstellen Sie eine Variable zum Speichern der Anzahl der hinzuzufügenden Tag(e) auf das Datum (Sie können diese Variable weglassen und direkt den Wert in der dritten Zeile verwenden)
  3. Ändern Sie den Wert von Date (da Date die Nummer des im Objekt gespeicherten Monatstages ist), indem Sie denselben Wert + die gewünschte Zahl eingeben. Der Wechsel zum nächsten Monat erfolgt automatisch

21voto

mark.nino.chua Punkte 233

Ich habe diese Erweiterungen gestern Abend erstellt:
können Sie entweder positive oder negative Werte übergeben;

Beispiel:

var someDate = new Date();
var expirationDate = someDate.addDays(10);
var previous = someDate.addDays(-5);

Date.prototype.addDays = function (num) {
    var value = this.valueOf();
    value += 86400000 * num;
    return new Date(value);
}

Date.prototype.addSeconds = function (num) {
    var value = this.valueOf();
    value += 1000 * num;
    return new Date(value);
}

Date.prototype.addMinutes = function (num) {
    var value = this.valueOf();
    value += 60000 * num;
    return new Date(value);
}

Date.prototype.addHours = function (num) {
    var value = this.valueOf();
    value += 3600000 * num;
    return new Date(value);
}

Date.prototype.addMonths = function (num) {
    var value = new Date(this.valueOf());

    var mo = this.getMonth();
    var yr = this.getYear();

    mo = (mo + num) % 12;
    if (0 > mo) {
        yr += (this.getMonth() + num - mo - 12) / 12;
        mo += 12;
    }
    else
        yr += ((this.getMonth() + num - mo) / 12);

    value.setMonth(mo);
    value.setYear(yr);
    return value;
}

8 Stimmen

Die Methode .addDays() funktioniert nicht für Daten, die die Sommerzeitgrenzen überschreiten.

2 Stimmen

Dies ist eine der besseren Antworten hier, denn Sie verwenden (korrekterweise) die Anzahl der Millis seit dem Epoc, um Daten/Zeiten darzustellen, und fügen Beträge von Millis für Anpassungen hinzu... Warum haben Sie dies dann nicht für "addMonths" beibehalten? Und warum kein Jahr hinzufügen? Wurde Ihnen langweilig?

0 Stimmen

Andere Zeiträume als Monate können durch statische Zahlen dargestellt werden. Aber Monate können vier verschiedene Längen haben. Außerdem kann jede Zeitspanne ab der Länge "Tage" bei der Sommerzeit eine variable Länge haben, so dass man die zeitbasierte Addition nicht mehr ohne eine weitere Komplexitätsstufe verwenden kann. Ich habe die Funktion addYears() hinzugefügt und addMonths() korrigiert.

20voto

sdgfsdh Punkte 28371

Eine Lösung, die für die Pipeline-Betreiber :

const addDays = days => date => {
  const result = new Date(date);

  result.setDate(result.getDate() + days);

  return result;
};

Verwendung:

// Without the pipeline operator...
addDays(7)(new Date());

// And with the pipeline operator...
new Date() |> addDays(7);

Wenn Sie mehr Funktionalität benötigen, schlage ich vor, dass Sie sich die datum-fns Bibliothek.

17voto

Aldo Punkte 435

Kurz:

function addDays(date, number) {
    const newDate = new Date(date);
    return new Date(newDate.setDate(newDate.getDate() + number));
}

console.log({
    tomorrow: addDays(new Date(), 1)
});

Vorschuss:

function addDays(date, number) {
    const newDate = new Date(date);
    return new Date(newDate.setDate(date.getDate() + number));
}

function addMonths(date, number) {
    const newDate = new Date(date);
    return new Date(newDate.setMonth(newDate.getMonth() + number));
}

function addYears(date, number) {
    const newDate = new Date(date);
    return new Date(newDate.setFullYear(newDate.getFullYear() + number));
}

function getNewDate(dateTime) {
    let date = new Date();
    let number = parseInt(dateTime.match(/\d+/)[0]);

    if (dateTime.indexOf('-') != -1)
        number = (- number);

    if (dateTime.indexOf('day') != -1)
        date = addDays(date, number);

    else if (dateTime.indexOf('month') != -1)
        date = addMonths(date, number);

    else if (dateTime.indexOf('year') != -1)
        date = addYears(date, number);

    return date;
}

console.log({
    tomorrow: getNewDate('+1day'),
    yesterday: getNewDate('-1day'),
    nextMonth: getNewDate('+1month'),
    nextYear: getNewDate('+1year'),
});

Mit dem Fix von jperl

2 Stimmen

Dadurch wird jedoch das Datumsobjekt geändert, das Sie an Ihre Funktionen übergeben. Wenn Sie dies tun addDays(today, 1) wird heute schon morgen sein. function addDays(date, number) { const newDate = new Date(date) return new Date(newDate.setDate(newDate.getDate() + number)); }

16voto

ejigsonpeter Punkte 109

Sie können es versuchen:

var days = 50;

const d = new Date();

d.setDate(d.getDate() + days)

Das sollte gut funktionieren.

3 Stimmen

Ich habe dies hochgestuft, aber der wahre Einzeiler ist new Date( (new Date()).setDate((new Date()).getDate() + 1) )

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