2014-05-16 5 views
0

나는 다음 주일의 날짜를 결정하는 JavaScript 함수를 가지고 있습니다. 일요일을 제외한 모든 날 동안 작동합니다.자바 스크립트 날짜, 일요일

For Sunday: 
Sun May 25 2014 
Sun Jun 08 2014 
Sun Jun 22 2014 

For Saturday: 
Sat May 24 2014 
Sat May 31 2014 
Sat Jun 07 2014 
Sat Jun 14 2014 

jsfiddle! 당신이

getDatesByweekDay(0); 

를 호출 할 때

function getDatesByweekDay(weekday){ 
    var startdate = new Date(); 
    var date2 = new Date(); 
    lastday = new Date(date2.setDate(date2.getDate() + 28 + weekday - date2.getDay()));  
    var dates = Array(); 
    var x = 0; 
    do { 
     startdate = new Date(startdate.setDate(startdate.getDate() + 7 + weekday - startdate.getDay())); 
      console.log(startdate); 
      var date = new Date(); 
      var curr_date = startdate.getDate(); 
      var curr_month = startdate.getMonth() + 1; 
      var curr_year = startdate.getFullYear(); 

      var formattedDate = curr_year + "-" + curr_month + "-" + curr_date; 

      dates[x] = formattedDate; 
      x++; 
     } while(lastday > startdate); 

     return dates;  
    } 

getDatesByweekDay(6); 
+0

일요일을 건너 뛰는 경우 일요일을 건너 뛰고 있습니다 – AlienWebguy

+0

일요일 만 반환하는 경우 날짜와 시간이 일치하지 않습니다 – PiraTa

+2

일요일은 7 대신 0을 사용하십시오. –

답변

3

작동하지 않는 이유는 7 일 간의 주 8 일을 지나가고 있기 때문입니다. 14-20에서 번호를 전달하면 반환 된 날짜 사이에 일주일 대신에 2 주를 건너 뜁니다.

문제는 do...while의 첫 번째 줄과 관련이있다 :

startdate = new Date(startdate.setDate(startdate.getDate() + 7 + weekday - startdate.getDay())); 
당신은 일주를 사전에 7을 추가하고

플러스 평일 뺀 STARTDATE의 요일을. weekday 변수가 1 주 이상인 경우 1 주일 이상 계속 진행됩니다. 0부터 6까지의 숫자 여야하고 7을 지나면이 버그가 발생합니다.

몇 가지 방법으로 수정할 수 있지만 입력을 weekday에서 0-6으로 정규화하면 문제가 해결됩니다. 기능 시작 부분 부근에 weekday = weekday % 7;을 추가하십시오.

+0

'weekday = weekday % 7' 솔루션을 사용하면 음수에서도 작동합니다! –

+0

전체 답변 해 주셔서 감사합니다. 질문이 하나 더 있습니다. 예를 들어 saterday의 경우 5 월 24 일부터 시작합니다. 나는 17에서 시작하고 싶다. js에 어떤 기능이나 그것을 고칠 수있는 것이 있는가? 아니면 ELSE를 써야합니까? – PiraTa

+1

오늘의 기능과 함께 다음 4 분을 보여줄 수 있도록 기능을 수정했습니다. jsfiddle : http://jsfiddle.net/Qc6K8/2/ –

2

은 당신이보고있는 올바른 정보를 반환하는 것 같다.