Цикл Javascript между диапазонами дат
учитывая два объекта Date (), где один меньше другого, как мне делать цикл каждый день между датами?
for(loopDate = startDate; loopDate < endDate; loopDate += 1)
{
}
будет ли такой цикл работать? Но как я могу добавить один день в счетчик циклов?
спасибо!
8 ответов:
вот способ сделать это, используя способ добавления один день вызывает дату, чтобы перейти к следующему месяцу, если это необходимо, и без возиться с миллисекундами. Переход на летнее время также не является проблемой.
var now = new Date(); var daysOfYear = []; for (var d = new Date(2012, 0, 1); d <= now; d.setDate(d.getDate() + 1)) { daysOfYear.push(new Date(d)); }обратите внимание, что если вы хотите сохранить дату, вам нужно будет сделать новый (как и выше с
new Date(d)), иначе вы закончите тем, что каждая сохраненная дата будет конечным значениемdв курсе.
основан на том оврагов ответа.
var start = new Date("02/05/2013"); var end = new Date("02/10/2013"); var loop = new Date(start); while(loop <= end){ alert(loop); var newDate = loop.setDate(loop.getDate() + 1); loop = new Date(newDate); }
Если startDate и endDate действительно являются объектами даты, вы можете преобразовать их в количество миллисекунд с полуночи 1 января 1970 года, например:
var startTime = startDate.getTime(), endTime = endDate.getTime();после этого вы смогли закрепить петлей от одного к другому увеличивая loopTime мимо 86400000 (1000*60*60*24) - количество миллисекунд в один день:
for(loopTime = startTime; loopTime < endTime; loopTime += 86400000) { var loopDay=new Date(loopTime) //use loopDay as you wish }
Я думаю, что нашел еще более простой ответ, если вы позволите себе использовать момент.js:
// cycle through last five days, today included // you could also cycle through any dates you want, mostly for // making this snippet not time aware const currentMoment = moment().subtract(4, 'days'); const endMoment = moment().add(1, 'days'); while (currentMoment.isBefore(endMoment, 'day')) { console.log(`Loop at ${currentMoment.format('YYYY-MM-DD')}`); currentMoment.add(1, 'days'); }<script src="https://cdn.jsdelivr.net/npm/moment@2/moment.min.js"></script>
var start = new Date("2014-05-01"); //yyyy-mm-dd var end = new Date("2014-05-05"); //yyyy-mm-dd while(start <= end){ var mm = ((start.getMonth()+1)>=10)?(start.getMonth()+1):'0'+(start.getMonth()+1); var dd = ((start.getDate())>=10)? (start.getDate()) : '0' + (start.getDate()); var yyyy = start.getFullYear(); var date = dd+"/"+mm+"/"+yyyy; //yyyy-mm-dd alert(date); start = new Date(start.setDate(start.getDate() + 1)); //date increase by 1 }
вот простой рабочий код, работал на меня
var from = new Date(2012,0,1); var to = new Date(2012,1,20); // loop for every day for (var day = from; day <= to; day.setDate(day.getDate() + 1)) { // your day is here }
на основе ответа Табаре, Мне пришлось добавить еще один день в конце, так как цикл сокращается до
var start = new Date("02/05/2013"); var end = new Date("02/10/2013"); var newend = end.setDate(end.getDate()+1); var end = new Date(newend); while(start < end){ alert(start); var newDate = start.setDate(start.getDate() + 1); start = new Date(newDate); }
на основе ответа Джаярджо:
var loopDate = new Date(); loopDate.setTime(datFrom.valueOf()); while (loopDate.valueOf() < datTo.valueOf() + 86400000) { alert(loopDay); loopDate.setTime(loopDate.valueOf() + 86400000); }
Comments