2017-12-15 29 views
1

Moment.js와 Twix.js를 사용하여 월간 간격으로 두 날짜 사이의 날짜 범위를 나열하려고하지만 시작 날짜의 날짜와 같은 날을 나열하고 싶습니까? 대신 목록의 날짜는 매월 1 일에 시작됩니다. 아래는 제 코드입니다. Moment.js 및 Twix.js를 사용하면 월간 간격으로 날짜 범위를 나열 할 수 있지만 시작일의 날짜와 같은 날이 있습니까?

var itr = moment.twix(new Date('2017-01-15'),new Date('2017-04-20')).iterate("months"); 
var range=[]; 
while(itr.hasNext()){ 
    range.push(itr.next().format("YYYY-MMM-DD")) 
} 
alert(range); 

이 결과 2017 - 1 월 01,2017 2 월-01 등하지만 내가 원하는 것은 2017 - 1 월 15,2017 2 월-15 등

하는 방식이 있는가 내가 원하는 것을하기 위해 Twix 나 Moment를 구성 할 수 있습니까? 나는 아마 이것을 할 수있는 순수한 JS를 찾을 수 있지만 내가 사용하는 플랫폼을위한 작은 플러그인을 쓰고 있고 Twomix는 내가 필요로하는 많은 유연성과 옵션을 제공한다.

감사합니다.

답변

1

모든 달이 동등하지 않은 것과 같은 적절한 이유로, 윤년이 발생하는 등의 이유로 상자에서 벗어날 수없는 것처럼 보입니다.

는의가되는 시작 날짜의 예를 들어 보자 2017년 1월 31일 및 종료 날짜가 2017년 3월 31일 서비스를 제공합니다. 이터레이터에서 반환 할 2017-02-31이 없으므로 문제가 발생합니다. 윤년이 아닌 경우 심지어 YYYY-01-29까지 문제가 될 수 있습니다.

그런데 부작용이있는 문제로 우리는 몇 가지 타협을 할 수 있습니다. 다음과 같이 당신이 위 또는 다음 달에 미끄러 범위의 일부 요소에 동의 함을 설명한 것과 같은 상황으로 실행되지 않습니다 선행 알고 가정하면, 우리는 위의 코드를 수정할 수 있습니다

var startDate = moment('2017-01-15'); 
 
var firstDay = startDate.date(); 
 
var range=[]; 
 

 
var itr = startDate.twix('2017-04-20').iterate('months'); 
 
while(itr.hasNext()){ 
 
    range.push(itr.next().add(firstDay, 'days').format('YYYY-MMM-DD')); 
 
} 
 

 
console.log(range);
<script src="https://momentjs.com/downloads/moment.js"></script> 
 
<script src="http://isaaccambron.com/twix.js/twix.js/dist/twix.js"></script>

기본적으로 시작 날짜의 요일을 기록하고 iterator에 의해 반환 된 모든 순간 개체에 추가합니다.

+0

정말 고마워요! 나는 그런 종류의 문제를 다루기를 기대한다고 설명 했어야한다. 28 일 이후의 시작 날짜를 허용하지 않음으로써 이것은 위대합니다. 다시 한번 감사드립니다. – willcom

+0

@willcom 여러분, 환영합니다. 다행입니다. –