最近、プロジェクトでクエリページに遭遇しました。クエリ条件では、選択した年、月、週の数に基づいて、選択した日数から週の日までの日数を表示することです。私はオンラインで検索し、同様のものがあるが、まったく同じではないことがわかったので、自分でやらなければなりませんでした。アイデアは、今年の1年と月の1日と毎月の曜日を最初に取得し、次に月曜日の日付を計算することです。
これを基本ポイントとすると、最初の週の終わりの日が今日に追加され、2週目の初日が今日に追加され、終日は今日に追加され、終日は5週目の開始日と終わりの日が計算されるまで追加されます。
特定のコードは次のとおりです。
//この方法には2つのパラメーターがあります。日付は指定された日付パラメーターであり、日はその日に追加または差し引く必要がある日数です。 //たとえば、追加(2010-10-01、-3)は、2010-10-01から今後3日間、つまり2010-09-28関数Adddate(日付、日){var d = new Date(date); d.setDate(d.getDate()+days); var m = d.getmonth()+1; var tmpdate = d.getwortherear() + "/" + m + "/" + d.getdate(); var resultdate = new Date(tmpdate); return resultdate; } //選択した年と月をyyyy-mm-dd関数chanderateformat(datein){var year = 0; var month = 0; var day = 0; var currentDate = ""; year = datein.getyear();月= 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を返します。 } //選択された週の関数weektodate(weeknumber、strweekday、datein)に従って週の開始日と終了日を計算します{//出力var outputdate_1 = "";の開始日//出力の終了日var outputdate_2 = ""; var tmp_date = ""; //年の1日に選択された日が日曜日になった場合、週の月曜日の日付は(strweekday == '0'){outputdate_1 = adddate(datein、-6); } //選択された年と月の1日の日が月曜日の場合、2番目のパラメーターは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 = chanderateformat(temp_date); } else {//第2週後の開始日と終了日は、ベースポイントdocument.getElementById( "spndate")。value = chanderateformat(outputdate_2); temp_date = adddate(outputdate_2、+6); document.getElementById( "finishtime")。value = chanderateformat(temp_date); }} function getFromTodateOfSelectedWeek(){var year = document.getElementById( "sltyear"); var optionyear = year.getelementsbytagname( "option"); var stryear = ""; for(var i = 0; i <optionyear.length; ++ i){if(optionyear [i] .selected){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] .selected){strmonth = option [i] .text; }} //選択した年と月によると、日付文字列はyyyy/mm/01 var sltdate_tmp_0 = stryear + "/" + strmonth + "/" + "1"; //日付文字列を日付に変換しますvar sltdate_tmp_1 = new Date(sltdate_tmp_0); //月の1日に週数を取得var weekday = sltdate_tmp_1.getday(); //ページで選択された週数を取得var weeknumber = 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] .selected){strweek = optionweek [i] .text; }} //週1を選択するとき、1年目と1か月目をさまざまな可能性として計算し、日付を日曜日に戻し、日曜日に日曜日を返します//次の判断などを返します。 } if(weenday == '1'){weektodate(strweek、 '1'、sltdate_tmp_1); } if(weenday == '2'){weektodate(strweek、 '2'、sltdate_tmp_1); } if(weenday == '2'){weektodate(strweek、 '2'、sltdate_tmp_1); } if(weenday == '2'){weektodate(strweek、 '2'、sltdate_tmp_1); } if(weenday == '3'){weektodate(strweek、 '3'、sltdate_tmp_1); } if(weenday == '4'){weektodate(strweek、 '4'、sltdate_tmp_1); } if(weenday == '5'){weektodate(strweek、 '5'、sltdate_tmp_1); } if(weenday == '6'){weektodate(strweek、 '6'、sltdate_tmp_1); }} if(strweek == '2'){if(weenday == '0'){weektodate(strweek、 '0'、sltdate_tmp_1); } if(weenday == '1'){weektodate(strweek、 '1'、sltdate_tmp_1); } if(weenday == '2'){weektodate(strweek、 '2'、sltdate_tmp_1); } if(weenday == '3'){weektodate(strweek、 '3'、sltdate_tmp_1); } if(weenday == '4'){weektodate(strweek、 '4'、sltdate_tmp_1); } if(weenday == '5'){weektodate(strweek、 '5'、sltdate_tmp_1); } if(weenday == '6'){weektodate(strweek、 '6'、sltdate_tmp_1); }} if(strweek == '3'){if(weenday == '0'){weektodate(strweek、 '0'、sltdate_tmp_1); } if(weenday == '1'){weektodate(strweek、 '1'、sltdate_tmp_1); } if(weenday == '1'){weektodate(strweek、 '1'、sltdate_tmp_1); } if(weenday == '1'){weektodate(strweek、 '1'、sltdate_tmp_1); } if(weenday == '2'){weektodate(strweek、 '2'、sltdate_tmp_1); } if(weenday == '3'){weektodate(strweek、 '3'、sltdate_tmp_1); } if(weenday == '4'){weektodate(strweek、 '4'、sltdate_tmp_1); } if(weenday == '5'){weektodate(strweek、 '5'、sltdate_tmp_1); } if(weenday == '6'){weektodate(strweek、 '6'、sltdate_tmp_1); }} if(strweek == '4'){if(weneday == '0'){weektodate(strweek、 '0'、sltdate_tmp_1); } if(weenday == '1'){weektodate(strweek、 '1'、sltdate_tmp_1); } if(weenday == '2'){weektodate(strweek、 '2'、sltdate_tmp_1); } if(weenday == '3'){weektodate(strweek、 '2'、sltdate_tmp_1); } if(weenday == '3'){weektodate(strweek、 '3'、sltdate_tmp_1); } if(weenday == '4'){weektodate(strweek、 '4'、sltdate_tmp_1); } if(weenday == '5'){weektodate(strweek、 '5'、sltdate_tmp_1); } if(weenday == '6'){weektodate(strweek、 '6'、sltdate_tmp_1); }} if(strweek == '5'){if(weenday == '0'){weektodate(strweek、 '6'、sltdate_tmp_1); }} if(strweek == '5'){if(weenday == '0'){weektodate(strweek、 '0'、sltdate_tmp_1); } if(weenday == '1'){weektodate(strweek、 '1'、sltdate_tmp_1); } if(weenday == '2'){weektodate(strweek、 '2'、sltdate_tmp_1); } if(weenday == '3'){weektodate(strweek、 '3'、sltdate_tmp_1); } if(weenday == '4'){weektodate(strweek、 '4'、sltdate_tmp_1); } if(weenday == '5'){weektodate(strweek、 '5'、sltdate_tmp_1); } if(weenday == '6'){weektodate(strweek、 '6'、sltdate_tmp_1); }}}テスト後、バグがあります。 2月1日は月曜日であり、選択された年が平均年である場合、2月の5週目が選ばれます。この時点で、5週目の開始日は2月ではなくすでに3月です。たとえば、2010年2月の第5週を選択するこの時点で、プログラムは2010-03-1から2010-03-07を表示します。
2つの解決策があります。 1つは、ユーザーが5週目を選択するときに月のドロップダウンボックスを強制することです。
テスト後、バグがあります。 2月1日は月曜日であり、選択された年が平均年である場合、2月の5週目が選ばれます。この時点で、5週目の開始日は2月ではなくすでに3月です。
たとえば、2010年2月の第5週を選択するこの時点で、プログラムは2010-03-1から2010-03-07を表示します。
2つの解決策があります。 1つは、ユーザーが5週目を選択するときに月のドロップダウンボックスを強制することです。
テスト後、バグがあります。 2月1日は月曜日であり、選択された年が平均年である場合、2月の5週目が選ばれます。この時点で、5週目の開始日は2月ではなくすでに3月です。
たとえば、2010年2月の第5週を選択するこの時点で、プログラムは2010-03-1から2010-03-07を表示します。
2つの解決策があります。 1つは、ユーザーが5週目を選択するときに月のドロップダウンボックスを強制することです。
上記は、JavaScriptベースの実装に基づいた実装コードです。JavaScriptに基づく実装は、開始日と終了日を表示する週数を選択します。私はそれが誰にでも役立つことを願っています!