최근에 프로젝트에서 쿼리 페이지를 만났는데, 여기서 쿼리 조건은 선택된 연도, 월 및 주 수를 기준으로 선택된 일일에서 요일을 표시하는 것입니다. 나는 온라인으로 검색했고 비슷한 것들이 있지만 정확히 같은 것이 아니라는 것을 알았으므로 직접해야했습니다. 아이디어는 먼저 연중 첫 번째 요일을 얻은 다음 주 월요일 날짜를 계산하는 것입니다.
이것을 기본 지점으로 받아들이고, 첫 주의 종료일은 오늘날에 추가되며, 두 번째 주의 시작일은 오늘날에 추가되고, 종료일이 오늘에 추가되고, 끝날이 오늘에 추가됩니다.
특정 코드는 다음과 같습니다.
//이 메소드에는 두 개의 매개 변수가 있습니다. 날짜는 주어진 날짜 매개 변수이며, 해당 날짜에 추가 또는 빼야 할 일 수입니다. // 예를 들어, Add (2010-10-01, -3)는 2010-10-01에서 앞으로 3 일의 날짜를 반환합니다. d.setDate (d.getDate ()+일); var m = d.getmonth ()+1; var tmpdate = d.getlyear () + "/" + m + "/" + d.getDate (); var resultdate = 새 날짜 (tmpdate); 반환 결과 데이트; } // 선택한 연도 및 월을 YYYY-MM-DD 함수로 변환했습니다. var month = 0; var day = 0; var currentDate = ""; 연도 = datein.getyear (); Month = datein.getmonth () + 1; day = datein.getDate (); currentDate = Year + "-"; if (Month> 10) {currentDate = currentDate + Month + "-"; } else {currentDate = currentDate + "0" + Month + "-"; } if (day> 10) {currentDate = currentDate + Day; } else {currentDate = currentDate + "0" + Day; } currentdate를 반환합니다. } // 선택한 주 함수 주간 연고 (주말, strweekday, datein)에 따라 주중의 시작 및 종료 날짜를 계산합니다 {// 출력 var outputdate_1 = ""의 시작일; // 출력의 종료 날짜 var outputdate_2 = ""; var tmp_date = ""; // 연도의 1 일에 선택된 날이 일요일이되면 주일의 월요일 날짜는 날짜 -6 if (strweekday == '0') {outputdate_1 = addDate (datein, -6); } // 선택한 연도 1 일의 날이 월요일이면 두 번째 매개 변수는 0으로 설정됩니다. if (strweekday == '1') {outputdate_1 = addDate (datein, 0); } if (strweekday == '2') {outputdate_1 = addDate (dateIn, -1); } if (strweekday == '3') {outputDate_1 = addDate (datein, -2); } if (strweekday == '4') {outputDate_1 = addDate (datein, -3); } if (strweekday == '5') {outputdate_1 = addDate (datein, -3); } if (strweekday == '5') {outputDate_1 = addDate (datein, -4); } if (strweekday == '6') {outputDate_1 = addDate (datein, -5); } if (WeekNumber == '1') {outputDate_2 = dateIn; } if (WeekNumber == '2') {outputDate_2 = addDate (outputDate_1,+7); } if (WeekNumber == '3') {outputDate_2 = addDate (outputDate_1,+14); } if (WeekNumber == '4') {outputDate_2 = addDate (outputDate_1,+21); } if (WeekNumber == '5') {outputDate_2 = addDate (outputDate_1,+28); } if (WeekNumber == '1') {// 첫 주 시작 일과 종료일의 계산 기본 사항은 outputDate_1이므로 document.getElementById ( "spndate"). temp_date = addDate (outputDate_1,+6); document.getElementById ( "FinishTime"). value = ChangeateFormat (temp_date); } else {// 주 2 주 후 시작 및 종료 일은 outputDate_2를 기본 점 문서로 사용하여 계산됩니다. getElementById ( "spndate"). value = changeateformat (outputdate_2); temp_date = addDate (outputDate_2,+6); document.getElementById ( "FinishTime"). value = ChangeateFormat (temp_date); }} 함수 getFromTodateOfSelectedWeek () {var year = document.getElementById ( "sltyear"); var Optionyear = year.getElementsByTagName ( "옵션"); var stryear = ""; for (var i = 0; i <exectyear.length; ++ i) {if (Optionyear [i] .selected) {stryear = 옵션 시어 [i] .text; }} var month = document.getElementById ( "sltmonth"); var 옵션 = month.getElementsByTagName ( "옵션"); var strmonth = ""; for (var i = 0; i <옵션 .length; ++ i) {if (옵션 [i] .selected) {strmonth = 옵션 [i] .text; }} // 선택한 연도 및 월에 따라 날짜 문자열은 yyyy/mm/01 var sltdate_tmp_0 = stryear + "/" + strmonth + "/" + "1"; // 날짜 문자열을 날짜로 변환하십시오 var sltdate_tmp_1 = 새 날짜 (sltdate_tmp_0); // 월 1 일 1 일 주에 주간 수를 얻습니다. // 페이지에서 선택한 주 수를 가져옵니다. var OptionWeek = WeekNumber.getElementsByTagName ( "옵션"); var strweek = ""; var tmp_date = ""; var outputDate_1 = ""; var outputDate_2 = ""; for (var i = 0; i <OptionWeek.length; ++ i) {if (옵션 Week [i] .selected) {strweek = 옵션 위 [i] .text; }} // 1 주차를 선택할 때 연도 및 월 1 일을 다양한 가능성으로 계산하고, 일주일로 돌아와 일요일로 돌아가서 일요일로 돌아 오십시오. // 다음 판단 등 (strweek == '1') {if (strweek == '0') {WeekTodate (strweek, '0', sltdate_tmp_1); } if (Weekday == '1') {WeekTodate (strweek, '1', sltdate_tmp_1); } if (Weekday == '2') {WeekTodate (strweek, '2', sltdate_tmp_1); } if (Weekday == '2') {WeekTodate (strweek, '2', sltdate_tmp_1); } if (Weekday == '2') {WeekTodate (strweek, '2', sltdate_tmp_1); } if (Weekday == '3') {WeekTodate (strweek, '3', sltdate_tmp_1); } if (Weekday == '4') {WeekTodate (strweek, '4', sltdate_tmp_1); } if (Weekday == '5') {WeekTodate (strweek, '5', sltdate_tmp_1); } if (Weekday == '6') {WeekTodate (strweek, '6', sltdate_tmp_1); }} if (strweek == '2') {if (Weekday == '0') {WeekTodate (strweek, '0', sltdate_tmp_1); } if (Weekday == '1') {WeekTodate (strweek, '1', sltdate_tmp_1); } if (Weekday == '2') {WeekTodate (strweek, '2', sltdate_tmp_1); } if (Weekday == '3') {WeekTodate (strweek, '3', sltdate_tmp_1); } if (Weekday == '4') {WeekTodate (strweek, '4', sltdate_tmp_1); } if (Weekday == '5') {WeekTodate (strweek, '5', sltdate_tmp_1); } if (Weekday == '6') {WeekTodate (strweek, '6', sltdate_tmp_1); }} if (strweek == '3') {if (Weekday == '0') {WeekTodate (strweek, '0', sltdate_tmp_1); } if (Weekday == '1') {WeekTodate (strweek, '1', sltdate_tmp_1); } if (Weekday == '1') {WeekTodate (strweek, '1', sltdate_tmp_1); } if (Weekday == '1') {WeekTodate (strweek, '1', sltdate_tmp_1); } if (Weekday == '2') {WeekTodate (strweek, '2', sltdate_tmp_1); } if (Weekday == '3') {WeekTodate (strweek, '3', sltdate_tmp_1); } if (Weekday == '4') {WeekTodate (strweek, '4', sltdate_tmp_1); } if (Weekday == '5') {WeekTodate (strweek, '5', sltdate_tmp_1); } if (Weekday == '6') {WeekTodate (strweek, '6', sltdate_tmp_1); }} if (strweek == '4') {if (Weekday == '0') {WeekTodate (strweek, '0', sltdate_tmp_1); } if (Weekday == '1') {WeekTodate (strweek, '1', sltdate_tmp_1); } if (Weekday == '2') {WeekTodate (strweek, '2', sltdate_tmp_1); } if (Weekday == '3') {WeekTodate (strweek, '2', sltdate_tmp_1); } if (Weekday == '3') {WeekTodate (strweek, '3', sltdate_tmp_1); } if (Weekday == '4') {WeekTodate (strweek, '4', sltdate_tmp_1); } if (Weekday == '5') {WeekTodate (strweek, '5', sltdate_tmp_1); } if (Weekday == '6') {WeekTodate (strweek, '6', sltdate_tmp_1); }} if (strweek == '5') {if (Weekday == '0') {WeekTodate (strweek, '6', sltdate_tmp_1); }} if (strweek == '5') {if (Weekday == '0') {WeekTodate (strweek, '0', sltdate_tmp_1); } if (Weekday == '1') {WeekTodate (strweek, '1', sltdate_tmp_1); } if (Weekday == '2') {WeekTodate (strweek, '2', sltdate_tmp_1); } if (Weekday == '3') {WeekTodate (strweek, '3', sltdate_tmp_1); } if (Weekday == '4') {WeekTodate (strweek, '4', sltdate_tmp_1); } if (Weekday == '5') {WeekTodate (strweek, '5', sltdate_tmp_1); } if (Weekday == '6') {WeekTodate (strweek, '6', sltdate_tmp_1); }}}테스트 후 버그가 있습니다. 2 월 1 일이 월요일이고 선택된 연도는 평균 연도이며 2 월 5 주가 선정됩니다. 현재 5 주차의 시작 날짜는 이미 2 월 대신 3 월입니다. 예를 들어, 2010 년 2 월 5 주차를 선택하면이 프로그램에 2010-03-1 ~ 2010-03-07이 표시됩니다.
두 가지 해결책이 있습니다. 하나는 사용자가 5 주차를 선택할 때 달의 드롭 다운 상자를 행진하도록하는 것입니다. 둘째는 주간 드롭 다운 상자를 4 주차로 강제하고 2010-02-22 ~ 2010-02-28을 표시하는 것입니다.
테스트 후 버그가 있습니다. 2 월 1 일이 월요일이고 선택된 연도는 평균 연도이며 2 월 5 주가 선정됩니다. 현재 5 주차의 시작 날짜는 이미 2 월 대신 3 월입니다.
예를 들어, 2010 년 2 월 5 주차를 선택하면이 프로그램에 2010-03-1 ~ 2010-03-07이 표시됩니다.
두 가지 해결책이 있습니다. 하나는 사용자가 5 주차를 선택할 때 달의 드롭 다운 상자를 행진하도록하는 것입니다. 둘째는 주간 드롭 다운 상자를 4 주차로 강제하고 2010-02-22 ~ 2010-02-28을 표시하는 것입니다.
테스트 후 버그가 있습니다. 2 월 1 일이 월요일이고 선택된 연도는 평균 연도이며 2 월 5 주가 선정됩니다. 현재 5 주차의 시작 날짜는 이미 2 월 대신 3 월입니다.
예를 들어, 2010 년 2 월 5 주차를 선택하면이 프로그램에 2010-03-1 ~ 2010-03-07이 표시됩니다.
두 가지 해결책이 있습니다. 하나는 사용자가 5 주차를 선택할 때 달의 드롭 다운 상자를 행진하도록하는 것입니다. 둘째는 주간 드롭 다운 상자를 4 주차로 강제하고 2010-02-22 ~ 2010-02-28을 표시하는 것입니다.
위의 것은 시작 및 종료 일을 표시 할 주 수를 선택하여 JavaScript를 기반으로 한 JavaScript 기반 구현을 기반으로 한 구현 코드입니다. 나는 그것이 모두에게 도움이되기를 바랍니다!