2017-12-10 23 views
0

저는 일종의 초보자입니다. 나는 두 시간 사이의 모든 시간 슬롯을 얻으려고 노력하고 있습니다. (moment.js) 약간. 더 정확하게. moment.js (무한 루프 문제?)를 사용하여 두 시간 사이의 모든 시간 슬롯 가져 오기 (및 일부 제외)

  • 나는
  • 내가 월요일 0시, 월요일 0시 반 ... 화요일 9 모든 30 개 슬롯 (의 array을 얻고 싶은 일 (말)을 start date (예를 들어 월요일)과 end date 있습니다 : 예를 들어 - -을 제외한 00, 화요일 9시 반, 화요일 10 : 00 ~)
  • 그러나 오전 9시 전에 슬롯 ...

const dates = [] 

const now = moment(now).startOf('day').hour(9).minute(0).seconds(0) 
const deadline = moment(end).hour(19).minute(0).seconds(0)  

while (now.diff(deadline) < 0) { 
    if (now > now.hour(9)) { 
    dates.push(now.format('YYYY-MM-DD HH:mm')) 
    } 
    now.add(30, 'minutes') 
} 

if 문이 없으면 모든 것이 작동합니다 (내 배열에는 내 두 날짜 사이의 모든 요일이 포함됨). 그러나 if을 사용하면 브라우저 이 (가) (무한 루프?)와 충돌합니다. 하지만 왜 그런지 모르겠다 ... 어떤 생각? 나는 ...

답변

0

순간 객체가 변경 가능하므로 now.hour(9) (다시)는 시간 = 9를 now 인스턴스로 설정하므로 now.diff(deadline) < 0은 항상 true입니다. 세터로 사용하는 경우 이러한 방법은 모두 원래의 순간을 변이 :

참고 : 문서의 Get + Set setion를 참조하십시오.

당신은 당신의 경우 상태 now (clone() 기능을 사용하거나 moment(now)를 사용)를 복제 할 수 있습니다. 여기

라이브 샘플 : 일반적으로

const dates = [] 
 

 
const now = moment().startOf('day').hour(9).minute(0).seconds(0) 
 
const deadline = moment().hour(19).minute(0).seconds(0) 
 

 
while (now.diff(deadline) < 0) { 
 
    if (now > moment(now).hour(9)) { 
 
    dates.push(now.format('YYYY-MM-DD HH:mm')) 
 
    } 
 
    now.add(30, 'minutes'); 
 
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.19.3/moment.min.js"></script>

><, isAfter 같은 사용 쿼리 방법, 같은 isBefore

+0

작품을 사용하여 순간 개체를 비교하지 않는다 매력! 감사합니다 사용하여 최신 FNS (가벼운 라이브러리) : '동안 (isBefore (현재 마감)) {(현재) dates.push 이제 = addMinutes (현재, 30) }' – nerotulip