304 Stimmen

Javascript - Array von Daten zwischen 2 Daten erhalten

var range = getDates(new Date(), new Date().addDays(7));

Ich möchte, dass "range" ein Array von Datumsobjekten ist, eines für jeden Tag zwischen den beiden Daten.

Der Trick dabei ist, dass auch Monats- und Jahresgrenzen berücksichtigt werden sollten.

8voto

gor181 Punkte 1866

Ich habe vor kurzem mit moment.js gearbeitet, folgendes hat den Trick gemacht.

function getDateRange(startDate, endDate, dateFormat) {
        var dates = [],
            end = moment(endDate),
            diff = endDate.diff(startDate, 'days');

        if(!startDate.isValid() || !endDate.isValid() || diff <= 0) {
            return;
        }

        for(var i = 0; i < diff; i++) {
            dates.push(end.subtract(1,'d').format(dateFormat));
        }

        return dates;
    };
    console.log(getDateRange(startDate, endDate, dateFormat));

Das Ergebnis wäre:

["09/03/2015", "10/03/2015", "11/03/2015", "12/03/2015", "13/03/2015", "14/03/2015", "15/03/2015", "16/03/2015", "17/03/2015", "18/03/2015"]

7voto

Adrian Moisa Punkte 3386

Ich verwende die Lösung von @Mohammed Safeer schon eine Weile und habe einige Verbesserungen vorgenommen. Die Verwendung von formatierten Daten ist eine schlechte Praxis bei der Arbeit in Ihren Controllern. moment().format() sollte nur zu Anzeigezwecken in Ansichten verwendet werden. Denken Sie auch daran, dass moment().clone() gewährleistet die Trennung von Eingabeparametern, so dass die Eingabedaten nicht verändert werden. Ich empfehle Ihnen dringend, moment.js zu verwenden, wenn Sie mit Daten arbeiten.

Verwendung:

  • Geben Sie moment.js-Daten als Werte für startDate , endDate Parameter
  • interval ist optional und steht standardmäßig auf "Tage". Verwenden Sie Intervalle, die unterstützt werden von .add() Methode (moment.js). Weitere Einzelheiten hier
  • total ist nützlich für die Angabe von Intervallen in Minuten. Er ist standardmäßig auf 1 eingestellt.

Aufrufen:

var startDate = moment(),
    endDate = moment().add(1, 'days');

getDatesRangeArray(startDate, endDate, 'minutes', 30);

Funktion:

var getDatesRangeArray = function (startDate, endDate, interval, total) {
    var config = {
            interval: interval || 'days',
            total: total || 1
        },
        dateArray = [],
        currentDate = startDate.clone();

    while (currentDate < endDate) {
        dateArray.push(currentDate);
        currentDate = currentDate.clone().add(config.total, config.interval);
    }

    return dateArray;
};

6voto

Công Thắng Punkte 215
var listDate = [];
var startDate ='2017-02-01';
var endDate = '2017-02-10';
var dateMove = new Date(startDate);
var strDate = startDate;

while (strDate < endDate){
  var strDate = dateMove.toISOString().slice(0,10);
  listDate.push(strDate);
  dateMove.setDate(dateMove.getDate()+1);
};
console.log(listDate);

//["2017-02-01", "2017-02-02", "2017-02-03", "2017-02-04", "2017-02-05", "2017-02-06", "2017-02-07", "2017-02-08", "2017-02-09", "2017-02-10"]

6voto

May Noppadol Punkte 598
Array(7).fill().map((_,i) => dayjs().subtract(i, "day").format("YYYY-MM-DD"));

6voto

KARTHIKEYAN.A Punkte 14230

Ich verwende eine einfache while-Schleife zur Berechnung der Zwischen-Daten

var start = new Date("01/05/2017");
var end = new Date("06/30/2017");
var newend = end.setDate(end.getDate()+1);
end = new Date(newend);
while(start < end){
   console.log(new Date(start).getTime() / 1000); // unix timestamp format
   console.log(start); // ISO Date format          
   var newDate = start.setDate(start.getDate() + 1);
   start = new Date(newDate);
}

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