[javascript] 기간 사이의 JavaScript 루프

Date()하나가 다른 것보다 작은 두 개의 객체가 주어지면 매일 날짜 사이에 루프를 어떻게합니까?

for(loopDate = startDate; loopDate < endDate; loopDate += 1)
{

}

이런 종류의 루프가 작동합니까? 그러나 루프 카운터에 하루를 어떻게 추가 할 수 있습니까?

감사!



답변

하루를 추가하면 필요한 경우 날짜가 다음 달로 롤오버되고 밀리 초 단위로 엉망이되는 방법을 사용하여이를 수행하는 방법이 있습니다. 일광 절약 시간도 문제가되지 않습니다.

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루프에서 최종 값이 됩니다.


답변

Tom Gullen의 답변을 기반으로합니다.

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가 실제로 날짜 객체 인 경우 1970 년 1 월 1 일 자정 이후 다음과 같이 밀리 초 단위로 변환 할 수 있습니다.

var startTime = startDate.getTime(), endTime = endDate.getTime();

그런 다음 1에서 다른 증분 loopTime으로 86400000 (1000 * 60 * 60 * 24)까지 루프 할 수 있습니다-하루의 밀리 초 수 :

for(loopTime = startTime; loopTime < endTime; loopTime += 86400000)
{
    var loopDay=new Date(loopTime)
    //use loopDay as you wish
}


답변

Moment.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 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("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
}


답변

Tabare의 답변을 바탕으로주기가 끝나기 때문에 마지막 날에 하루를 더 추가해야했습니다.

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