307 votes

Javascript - obtenir un tableau de dates entre 2 dates

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

J'aimerais que "range" soit un tableau d'objets date, un pour chaque jour entre les deux dates.

L'astuce consiste à gérer également les limites du mois et de l'année.

8voto

gor181 Points 833

J'ai récemment travaillé avec moment.js, ce qui suit a fait l'affaire

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));

Le résultat serait le suivant :

["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 Points 1316

J'utilise la solution de @Mohammed Safeer depuis un certain temps et j'y ai apporté quelques améliorations. L'utilisation de dates formatées est une mauvaise pratique lorsque vous travaillez dans vos contrôleurs. moment().format() ne doit être utilisé qu'à des fins d'affichage dans les vues. N'oubliez pas non plus que les moment().clone() garantit la séparation des paramètres d'entrée, ce qui signifie que les dates d'entrée ne sont pas modifiées. Je vous encourage vivement à utiliser moment.js lorsque vous travaillez avec des dates.

Utilisation :

  • Fournir des dates moment.js comme valeurs pour startDate , endDate paramètres
  • interval est facultatif et prend par défaut la valeur "jours". Utiliser les intervalles supportés par .add() (moment.js). Plus de détails ici
  • total est utile pour spécifier des intervalles en minutes. La valeur par défaut est 1.

Invoquez :

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

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

Fonction :

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 Points 127
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

KARTHIKEYAN.A Points 4408

J'utilise une simple boucle while pour calculer les dates intermédiaires.

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);
}

6voto

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X