날짜 범위 간의 자바 스크립트 루프
하나가 다른 것보다 작은 두 개의 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();
그런 다음 하루에서 밀리 초 수까지 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);
}
밀리 초로 효율적인 방법을 원한다면 :
var daysOfYear = [];
for (var d = begin; d <= end; d = d + 86400000) {
daysOfYear.push(new Date(d));
}
UI에서 시작 날짜와 종료 날짜를 가져 와서 컨트롤러의 범위 변수에 저장했다고 가정 해 봅시다.
그런 다음 모든 함수 호출에서 재설정 될 배열을 선언하여 함수에 대한 다음 호출에서 새 데이터를 저장할 수 있습니다.
var dayLabel = [];
Remember to use new Date(your starting variable) because if you dont use the new date and directly assign it to variable the setDate function will change the origional variable value in each iteration`
for (var d = new Date($scope.startDate); d <= $scope.endDate; d.setDate(d.getDate() + 1)) {
dayLabel.push(new Date(d));
}
Based on Jayarjo's answer:
var loopDate = new Date();
loopDate.setTime(datFrom.valueOf());
while (loopDate.valueOf() < datTo.valueOf() + 86400000) {
alert(loopDay);
loopDate.setTime(loopDate.valueOf() + 86400000);
}
참고URL : https://stackoverflow.com/questions/4345045/javascript-loop-between-date-ranges
'Programing' 카테고리의 다른 글
게스트 컴퓨터에서 호스트 컴퓨터에 어떻게 액세스합니까? (0) | 2020.07.11 |
---|---|
TypeScript와 함께 jQuery를 사용하는 방법 (0) | 2020.07.11 |
공백을 포함하여 줄 길이별로 텍스트 파일 정렬 (0) | 2020.07.11 |
Google지도와 같은 위치 활성화 대화 상자를 표시하는 방법 (0) | 2020.07.11 |
Xcode-그러나… 아카이브는 어디에 있습니까? (0) | 2020.07.11 |