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.

5voto

Flavio Del Grosso Punkte 345

Das ist eine weitere Lösung in wenigen Zeilen unter Verwendung der date-fns-Bibliothek:

const { format, differenceInDays, addDays } = dateFns;

const getRangeDates = (startDate, endDate) => {
  const days = differenceInDays(endDate, startDate);
  console.log([...Array(days + 1).keys()].map((i) => format(addDays(startDate, i), 'YYYY-MM-DD')));
};

getRangeDates('2021-06-01', '2021-06-05');

<script src="https://cdnjs.cloudflare.com/ajax/libs/date-fns/1.30.1/date_fns.js"></script>

4voto

Verwendung von JavaScript

const getDatesBetween = (startDate, endDate, includeEndDate) => {
    const dates = [];
    const currentDate = startDate;
    while (currentDate < endDate) {
        dates.push(new Date(currentDate));
        currentDate.setDate(currentDate.getDate() + 1);
    }
    if (includeEndDate) dates.push(endDate);
    return dates;
};

TypeScript verwenden

const getDatesBetween = (
  startDate: Date,
  endDate: Date,
  includeEndDate?: boolean
) => {
  const dates = [];
  const currentDate = startDate;
  while (currentDate < endDate) {
    dates.push(new Date(currentDate));
    currentDate.setDate(currentDate.getDate() + 1);
  }
  if (includeEndDate) dates.push(endDate);
  return dates;
};

Ejemplo

console.log(getDatesBetween(new Date(2020, 0, 1), new Date(2020, 0, 3)));
console.log(getDatesBetween(new Date(2020, 0, 1), new Date(2020, 0, 3), true));

3voto

Ich verwende diese Funktion

function getDatesRange(startDate, stopDate) {
    const ONE_DAY = 24*3600*1000;
    var days= [];
    var currentDate = new Date(startDate);
    while (currentDate <= stopDate) {
        days.push(new Date (currentDate));
        currentDate = currentDate - 1 + 1 + ONE_DAY;
    }
    return days;
}

3voto

Nitesh Malviya Punkte 734

Mit momentJS können Sie dies ganz einfach tun

Moment zu Ihren Abhängigkeiten hinzufügen

npm i moment

Importieren Sie diese dann in Ihre Datei

var moment = require("moment");

Verwenden Sie dann den folgenden Code, um die Liste aller Daten zwischen zwei Daten zu erhalten

let dates = [];
let currDate = moment.utc(new Date("06/30/2019")).startOf("day");
let lastDate = moment.utc(new Date("07/30/2019")).startOf("day");

do {
 dates.push(currDate.clone().toDate());
} while (currDate.add(1, "days").diff(lastDate) < 0);
dates.push(currDate.clone().toDate());

console.log(dates);

3voto

ti994a Punkte 47

Hier ist ein One-Liner, der keine Bibliotheken benötigt, falls Sie keine weitere Funktion erstellen möchten. Ersetzen Sie einfach startDate (an zwei Stellen) und endDate (die js-Datumsobjekte sind) durch Ihre Variablen oder Datumswerte. Natürlich können Sie es auch in eine Funktion verpacken, wenn Sie dies bevorzugen

Array(Math.floor((endDate - startDate) / 86400000) + 1).fill().map((_, idx) => (new Date(startDate.getTime() + idx * 86400000)))

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