2011-07-18 2 views
3

에 시작, 자바 스크립트의 주에 일을 가져 오기 JavaScript로 2011 년 3 월 2 일의 요일.다음은 사용자로부터 주어진 입력의 주 일요일

일요일 6 일 월요일 7 일 화요일 8 일 수요일 9 일 목요일 10 일 금요일 11 일 토요일 12 일

아이디어가 있으십니까? 감사!

+0

이 어떻게 해당 월의 첫 주 정의합니까? 그 달의 첫 달을 가진 주입니까? 이 경우 전월의 마지막 주일 수도 있는데 이는 혼란 스러울 수 있습니다. 많은 곳에서 일주일의 첫 번째 날은 일요일이 아닌 월요일입니다. – RobG

+0

@RobG ".. 일주일의 첫날은 월요일이 아니고 일요일이 아닙니다."우리가 ISO를 기반으로한다면 그것은 맞습니다. 그러나 그것은 또한 어느 나라에 살고 있는지에 달려 있습니다. 대부분의 아시아 국가들은 일요일에 일주일에 시작합니다. 내 일주일에 일주일에 시작 했어 내 의뢰인이 그러라고 했어. – andsien

답변

8

을 감안할 때

var year = 2011; 
var month = 3; 
var week = 2; 

var firstDateOfMonth = new Date(year, month - 1, 1); // Date: year-month-01 

var firstDayOfMonth = firstDateOfMonth.getDay();  // 0 (Sun) to 6 (Sat) 

var firstDateOfWeek = new Date(firstDateOfMonth); // copy firstDateOfMonth 

firstDateOfWeek.setDate(       // move the Date object 
    firstDateOfWeek.getDate() +      // forward by the number of 
    (firstDayOfMonth ? 7 - firstDayOfMonth : 0)  // days needed to go to 
);             // Sunday, if necessary 

firstDateOfWeek.setDate(       // move the Date object 
    firstDateOfWeek.getDate() +      // forward by the number of 
    7 * (week - 1)         // weeks required (week - 1) 
); 

var dateNumbersOfMonthOnWeek = [];     // output array of date #s 
var datesOfMonthOnWeek = [];       // output array of Dates 

for (var i = 0; i < 7; i++) {      // for seven days... 

    dateNumbersOfMonthOnWeek.push(     // push the date number on 
     firstDateOfWeek.getDate());     // the end of the array 

    datesOfMonthOnWeek.push(      // push the date object on 
     new Date(+firstDateOfWeek));     // the end of the array 

    firstDateOfWeek.setDate(
     firstDateOfWeek.getDate() + 1);    // move to the next day 

} 

  • dateNumbersOfMonthOnWeek는 그 주의 날짜 수있을 것이다.
  • datesOfMonthOnWeek은 해당주의 날짜 개체를 갖습니다.

일자리가 과잉 인 것처럼 보일 수 있지만 대부분의 경우 다른 날짜로 넘어갈 때와 같이 모든 상황에서 작동해야합니다. 그래도 덜 장황하게 최적화 될 수 있다고 확신합니다.

+0

정말 좋습니다. setDate에 대해 더 설명해 주시겠습니까? 죄송합니다. 자바 스크립트 초보자입니다. 고마워. – andsien

+1

'Date :: setDate'는 하나의 인수를 취하고 그 객체의 날짜를로 변경하는 '날짜 번호'입니다. 값 '35'을 전달하면 오류가 발생하는 대신 다음 달인 며칠 동안 날짜가 변경된다는 것이 현명하고 유용합니다. –

+0

아, 한 주일은 다른 달로 떨어지더라도 하나의 문제가 있습니다. 나는 그것을 직접 고치려고 노력할 것이다. 다시 한 번 감사드립니다. – andsien

0

일반적으로 js의 날짜 조작에는 Datejs을 사용합니다. 나는 이런 식으로 할 거라고 :

var firstDayOfWeek = new Date(year,month-1,1).moveToDayOfWeek(0,-1).addWeeks(week-1); 
var lastDayOfWeek = firstDayOfWeek.addDays(6); 
0

을 해당 월의 첫 주가에있는 월의 첫 번째와 일이라고 가정하면, 다음 기능은 일주일의 첫 날의 날짜를 반환합니다 특정 연도, 월, 주 수 :

/* 
    Input year, month and week number from 1 
    Returns first day in week (Sunday) where 
    first week is the first with 1st of month in it 
*/ 
function getFirstDayOfWeek(y, m, w) { 
    var d = new Date(y, --m); 
    d.setDate(--w * 7 - d.getDay() + 1); 
    return d; 
} 

alert(getFirstDayOfWeek(2011,3, 2)); // Sun Mar 06 2011 

이 일의 나머지를 얻으려면, 단지 루프마다 날짜에 하나를 추가 6 회, 예를 들어,

function getWeekDates(y, m, w) { 
    var d = getFirstDayOfWeek(y, m, w) 
    var week = [new Date(d)]; 
    var i = 6; 
    while (i--) { 
    week.push(new Date(d.setDate(d.getDate() + 1))); 
    } 
    return week; 
} 

// Show week of dates 
var week = getWeekDates(2011,3, 2); 
for (var i=0, iLen=week.length; i<iLen; i++) { 
    alert(week[i]); 
} 
+0

당신이 대답을 robG에 대한 감사 ... 정말 서둘러 모드에 지금. 코드를 확인할 수 없었습니다. – andsien

+0

@RobG : 코드를 테스트하고 문제를 만났습니다. 또한 결과를보기 위해 Chrome Console을 사용했습니다. 세부 사항 : '주 번호 : 5 주 : 일요일 일요일 26 2014 00:00:00 GMT + 0700 (SE 아시아 표준시), Mon Jan 27 2014 00:00:00 GMT + 0700 (SE 아시아 표준시), ..., 토요일 Feb 01 2014 00:00:00 GMT + 0700 (SE 아시아 표준시) 주 번호 : 6 주 : 3 월 2 일 2014 00:00:00 GMT + 0700 (SE 아시아 표준시), Mon 03 3 월 2014 00:00:00 GMT + 0700 (동남아시아 표준시), ..., 토요일 03 2014 00:00:00 GMT + 0700 (동남아시아 표준시) ' 2014 년 1 월 2 일 (5 주차) ~ 2014 년 2 월 3 일 (6 주차). 고쳐주세요. –

0

나를 위해 일한 첫 번째 대답의 약간의 수정 :

year = 2014; 
week = 31;//week number is 31 for the example, could be 120.. it will just jump trough years 
// get the date for the first day of the year    
var firstDateOfYear = new Date(year,0,1); 
// set the date to the number of days for the number of weeks 
firstDateOfYear.setDate(firstDateOfYear.getDate()+(7 * (week-1))); 
// get the number of the day in the week 0 (Sun) to 6 (Sat) 
var counter = firstDateOfYear.getDay(); 

//make sunday the first day of the week 
for(i=0;i<counter;i++){ 
    firstDateOfYear.setDate(firstDateOfYear.getDate()-1) 
} 

var firstDateOfWeek = new Date(firstDateOfYear); // copy firstDateOfYear 

var dateNumbersOfMonthOnWeek = [];     // output array of date #s 
var datesOfMonthOnWeek = [];       // output array of Dates 

for (var i = 0; i < 7; i++) {      // for seven days... 
    dateNumbersOfMonthOnWeek.push(     // push the date number on 
     firstDateOfWeek.getDate());     // the end of the array 

datesOfMonthOnWeek.push(      // push the date object on 
    new Date(+firstDateOfWeek));     // the end of the array 

firstDateOfWeek.setDate(
    firstDateOfWeek.getDate() + 1);    // move to the next day 
}