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.
Date.prototype.addDays = function(days) {
var date = new Date(this.valueOf());
date.setDate(date.getDate() + days);
return date;
}
function getDates(startDate, stopDate) {
var dateArray = new Array();
var currentDate = startDate;
while (currentDate <= stopDate) {
dateArray.push(new Date (currentDate));
currentDate = currentDate.addDays(1);
}
return dateArray;
}
Voici un exemple fonctionnel démo http://jsfiddle.net/jfhartsock/cM3ZU/
J'ai regardé tous ceux mentionnés ci-dessus. J'ai fini par écrire moi-même. Vous n'avez pas besoin de momentjs pour cela . Une boucle for native suffit et est plus logique parce qu'une boucle for existe pour compter les valeurs dans un intervalle.
One Liner :
var getDaysArray = function(s,e) {for(var a=[],d=new Date(s);d<=new Date(e);d.setDate(d.getDate()+1)){ a.push(new Date(d));}return a;};
Version longue
var getDaysArray = function(start, end) {
for(var arr=[],dt=new Date(start); dt<=new Date(end); dt.setDate(dt.getDate()+1)){
arr.push(new Date(dt));
}
return arr;
};
Indiquez les dates intermédiaires :
var daylist = getDaysArray(new Date("2018-05-01"),new Date("2018-07-01"));
daylist.map((v)=>v.toISOString().slice(0,10)).join("")
/*
Output:
"2018-05-01
2018-05-02
2018-05-03
...
2018-06-30
2018-07-01"
*/
Jours écoulés depuis une date antérieure jusqu'à aujourd'hui :
var daylist = getDaysArray(new Date("2018-05-01"),new Date());
daylist.map((v)=>v.toISOString().slice(0,10)).join("")
Essayez ceci, n'oubliez pas d'inclure le moment js,
function getDates(startDate, stopDate) {
var dateArray = [];
var currentDate = moment(startDate);
var stopDate = moment(stopDate);
while (currentDate <= stopDate) {
dateArray.push( moment(currentDate).format('YYYY-MM-DD') )
currentDate = moment(currentDate).add(1, 'days');
}
return dateArray;
}
J'ai eu du mal à utiliser les réponses ci-dessus. Il manquait des jours dans les plages de dates en raison du décalage de fuseau horaire causé par l'heure d'été locale. J'ai mis en place une version utilisant les dates UTC qui résout ce problème :
function dateRange(startDate, endDate, steps = 1) {
const dateArray = [];
let currentDate = new Date(startDate);
while (currentDate <= new Date(endDate)) {
dateArray.push(new Date(currentDate));
// Use UTC date to prevent problems with time zones and DST
currentDate.setUTCDate(currentDate.getUTCDate() + steps);
}
return dateArray;
}
const dates = dateRange('2020-09-27', '2020-10-28');
console.log(dates);
Note : L'application d'un certain fuseau horaire ou de l'heure d'été dépend entièrement de l'endroit où vous vous trouvez. lieu . Il n'est généralement pas judicieux de surcharger cette fonction. L'utilisation de Dates UTC atténue la plupart des problèmes liés au temps.
Bonus : Vous pouvez définir l'intervalle de temps pour lequel vous souhaitez créer des horodatages à l'aide de l'option steps
paramètre. Si vous souhaitez que les horodatages hebdomadaires soient définis steps
a 7
.
J'utilise moment.js y Twix.js ils offrent un très bon support pour la manipulation de la date et de l'heure
var itr = moment.twix(new Date('2012-01-15'),new Date('2012-01-20')).iterate("days");
var range=[];
while(itr.hasNext()){
range.push(itr.next().toDate())
}
console.log(range);
Je l'ai fait fonctionner sur http://jsfiddle.net/Lkzg1bxb/
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.