Ich versuche, alle Daten zwischen zwei Daten zu console.log.

Hier ist der Code, den ich bisher habe:

    var dString = "18.04.2018";
    var dParts = dString.split('.');
    var in30Days = new Date(dParts[2] + '/' +
                            dParts[1] + '/' +
                            (+dParts[0] + 10)
                   );
    var endDate =  in30Days.getDate() + "." + (in30Days.getMonth()+1) + "." +in30Days.getFullYear();     
    console.log("Now:" + dString + " EndDate: " + endDate);

    for (var d = dString; d <= endDate; d.setDate(d.getDate() + 1)) {
        var loopDay = new Date(d);
        console.log("Day:" + loopDay);
    }

Das Enddatum ist das Startdatum plus 10 Tage.

Hier ist die Konsolenprotokollausgabe, die ich erhalte:

Now:18.04.2018 EndDate: 28.4.2018
Day:Invalid Date

Warum ist das Datum ungültig? Wo ist mein Fehler?

0
Venelin 18 Apr. 2018 im 16:24

3 Antworten

Beste Antwort

Ich würde zuerst die Zeichenfolge, die Sie haben, in ein Datum konvertieren und dann einfach Tage hinzufügen, bis Sie so viele Tage in der Zukunft haben, wie Sie benötigen.

const dString = "18.04.2018";
const days = 30;

let [day, month, year] = dString.split('.');

// month - 1 as month in the Date constructor is zero indexed
const now = new Date(year, month - 1, day);

let loopDay = now;
for (let i = 0; i <= days; i++) {
  loopDay.setDate(loopDay.getDate() + 1);
  console.log("Day: " + loopDay);
}

31 aufeinanderfolgende Daten werden an der Konsole protokolliert.

2
phuzi 18 Apr. 2018 im 13:56

Sie verwenden dString in Ihrer Schleife. Es ist kein Datum, es ist eine Zeichenfolge.

Außerdem würde ich die Verwendung des Konstruktors Date(string) vermeiden. Ich würde stattdessen Date(year, month, date) verwenden. Vorsicht, Januar ist der Monat 0, daher müssen Sie 1 auf den Monat zurückziehen, der durch Teilen der Zeichenfolge erhalten wurde.

Ein Beispiel finden Sie im folgenden Snippet.

var startString = "18.4.2018";
    var startParts = startString.split('.');
    var startDate = new Date(startParts[2], startParts[1]-1, startParts[0]);
    var in30DaysDate = new Date(startParts[2], startParts[1]-1, startParts[0]);; 

    in30DaysDate.setDate(startDate.getDate() + 30)

    console.log("Start:" + startDate + " EndDate: " + in30DaysDate);

    for (var d = startDate; d <= in30DaysDate; d.setDate(d.getDate() + 1)) {
        var loopDay = new Date(d);
        console.log("Day:" + loopDay);
    }
1
Guillaume Georges 18 Apr. 2018 im 13:36

In der for-Schleife verwenden Sie die Variable String in einem String-Format. Zunächst müssen Sie eine Datumszeichenfolge in das Datumsformat konvertieren. Hier können Sie eine Antwort finden.

Konvertieren einer Zeichenfolge in ein Datum in js

0
aniket mule 18 Apr. 2018 im 13:30