Недавно я столкнулся с страницей запроса в проекте, где условие запроса состоит в том, чтобы отобразить выбранное количество дней до дней недели в зависимости от выбранного года, месяца и недели. Я искал онлайн и обнаружил, что были похожие, но не совсем то же самое, поэтому мне пришлось сделать это сам. Идея состоит в том, чтобы сначала получить день недели 1 -го года и месяца года, а затем рассчитать дату понедельника недели.
Принимая это в основу, конечный день первой недели добавляется к сей день, начальный день второй недели добавляется к сей день, конечный день добавляется по сей день, конечный день добавляется по сей день, и так далее, до начала дня и дня в конце пятой недели рассчитывается.
Конкретный код заключается в следующем:
// Этот метод имеет два параметра. Дата - это параметр данной даты, а дни - это количество дней, которые необходимо добавить или вычитать в эту дату. // Например, add (2010-10-01, -3) возвращает дату 3 дня в будущем с 2010-10-01, то есть, то есть, 2010-09-28 Функция AddDate (Date, Days) {var d = новая дата (дата); D.SetDate (D.GetDate ()+Days); var m = d.getmonth ()+1; var tmpdate = d.getbyear () + "/" + m + "/" + d.getDate (); var resultDate = новая дата (tmpdate); вернуть результат; } // Преобразование выбранного года и месяца в функцию yyyy-mm-dd madidateFormat (datein) {var Year = 0; var month = 0; var day = 0; var CurrentDate = ""; Год = datein.getyear (); месяц = datein.getmonth () + 1; Day = datein.getDate (); CurrentDate = Год + "-"; if (месяц> 10) {currentDate = currentDate + месяц + "-"; } else {currentDate = currentDate + "0" + месяц + "-"; } if (day> 10) {currentDate = currentDate + day; } else {currentDate = currentDate + "0" + day; } return CurrentDate; } // Рассчитайте дату начала и окончания недели в соответствии с выбранной недельной функцией Weektodate (Weeknumber, 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"). value = medieTATEFORMAT (outputDate_1); temp_date = addDate (outputDate_1,+6); document.getElementById ("finishTime"). value = mediceAteFormat (temp_date); } else {// начало и конечные дни после недели 2 рассчитываются с использованием outputDate_2 в качестве базовой точки document.getElementById ("spndate"). value = medicaTeformat (outputDate_2); temp_date = addDate (outputDate_2,+6); document.getElementById ("finishTime"). value = mediceAteFormat (temp_date); }} function getFromToDateOfSelectedWeek () {var Год = документ.getElementById ("sltyear"); var ntainyear = year.getElementsbytagname ("option"); var stryear = ""; for (var i = 0; i <optionyyear.length; ++ i) {if (optionyear [i]. Selection) {stryear = optionyear [i] .text; }} var month = document.getElementbyId ("sltmonth"); var option = month.getelementsbytagname ("option"); var strmonth = ""; for (var i = 0; i <option.length; ++ i) {if (option [i]. Selection) {strmonth = option [i] .Text; }} // В соответствии с выбранным годом и месяцем строка даты объединены в yyyy/mm/01 var sltdate_tmp_0 = stryear + "/" + strmonth + "/" + "1"; // конвертировать строку даты в тип типа даты var sltdate_tmp_1 = новая дата (sltdate_tmp_0); // Получить количество недель в 1 -м месяце var Weekday = sltdate_tmp_1.getday (); // Получение количества недель, выбранных страницей var weekenmber = document.getElementbyId ("Weeknumber"); var optionweek = weeknumber.getelementsbytagname ("option"); var strweek = ""; var tmp_date = ""; var outputDate_1 = ""; var outputDate_2 = ""; for (var i = 0; i <optionweek.length; ++ i) {if (optionweek [i]. Selection) {strweek = optionweek [i] .Text; }} // При выборе недели 1, рассчитайте день года и месяц 1 как различные возможности, верните дату недели в воскресенье и верните дату недели в воскресенье // Следующее решение и т. Д. (Strweek == '1') {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 == '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') {weedTodate (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') {weedTodate (strweek, '6', sltdate_tmp_1); }} if (strweek == '5') {if (WeekDay == '0') {weedTodate (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); }}}После тестирования есть ошибка. Когда 1 февраля в понедельник, а выбран года - средний год, выбирается пятая неделя февраля. В настоящее время дата начала недели 5 уже март вместо февраля. Например, выберите 5-ю неделю февраля 2010 года.
Есть два решения. Одним из них является то, чтобы заставить раскрывающуюся коробку «Раскрытие месяца», когда пользователь выбирает неделю 5. Во-вторых, поднимите еженедельный выпадающий ящик до 4-й недели и отобразить 2010-02-22–2012-02-28.
После тестирования есть ошибка. Когда 1 февраля в понедельник, а выбран года - средний год, выбирается пятая неделя февраля. В настоящее время дата начала недели 5 уже март вместо февраля.
Например, выберите 5-ю неделю февраля 2010 года.
Есть два решения. Одним из них является то, чтобы заставить раскрывающуюся коробку «Раскрытие месяца», когда пользователь выбирает неделю 5. Во-вторых, поднимите еженедельный выпадающий ящик до 4-й недели и отобразить 2010-02-22–2012-02-28.
После тестирования есть ошибка. Когда 1 февраля в понедельник, а выбран года - средний год, выбирается пятая неделя февраля. В настоящее время дата начала недели 5 уже март вместо февраля.
Например, выберите 5-ю неделю февраля 2010 года.
Есть два решения. Одним из них является то, чтобы заставить раскрывающуюся коробку «Раскрытие месяца», когда пользователь выбирает неделю 5. Во-вторых, поднимите еженедельный выпадающий ящик до 4-й недели и отобразить 2010-02-22–2012-02-28.
Выше приведено код реализации, основанный на реализации на основе JavaScript, основанной на JavaScript, выбирая количество недель для отображения дней начала и окончания. Я надеюсь, что это будет полезно для всех!