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.
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.
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"]
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 :
startDate
, endDate
paramètresinterval
est facultatif et prend par défaut la valeur "jours". Utiliser les intervalles supportés par .add()
(moment.js). Plus de détails icitotal
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;
};
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"]
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);
}
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.