/** * 年月から末日を取得する * @param in_year 年 * @param in_month 月 * @return 末日 */ function getLastDay(in_year, in_month) { //配列に基本月末日を設定 var arrayLastDay = [31,28,31,30,31,30,31,31,30,31,30,31]; //閏年判定 if(((in_year % 4 == 0) && (in_year % 100 != 0)) || (in_year % 400 == 0)){ arrayLastDay[1] = 29; } //配列から末日を返却 if(in_month > 0 && in_month <= 12){ return arrayLastDay[in_month - 1]; }else{ return 0; } } /** * 指定年月日のコントロールIDから日付コンボボックスを再作成する。 * ※末日が年月により変化する為。 * @param in_id_year コントロールID/年コンボ * @param in_id_month コントロールID/月コンボ * @param in_id_day コントロールID/日コンボ */ function reloadDateCombo(in_id_year, in_id_month, in_id_day) { //IDからオブジェクト取得 var elemntYear = document.getElementById(in_id_year); var elemntMonth = document.getElementById(in_id_month); var elemntDay = document.getElementById(in_id_day); //選択日付の退避 var selectDay = elemntDay.value; //月末日を取得 var lastDay = getLastDay(elemntYear.value, elemntMonth.value); //日付コンボを初期化 elemntDay.length = 0; elemntDay.length++; elemntDay.options[0].text = "--"; elemntDay.options[0].value = ""; //末日までのコンボ再作成 for(var i = 1;i < (lastDay+1);i++){ elemntDay.length++; elemntDay.options[i].text = i; elemntDay.options[i].value = i; } //初期値の設定 elemntDay.options[0].selected = true; } /** * 年月日コンボボックスの内容をdatepickerへ反映する * @param in_id_dtp コントロールID/datepicker * @param in_id_year コントロールID/年コンボ * @param in_id_month コントロールID/月コンボ * @param in_id_day コントロールID/日コンボ */ function SelectChangeDateCombo(in_id_dtp, in_id_year, in_id_month, in_id_day) { //IDからオブジェクト取得 var elemntDatepicker = document.getElementById(in_id_dtp); var elemntYear = document.getElementById(in_id_year); var elemntMonth = document.getElementById(in_id_month); var elemntDay = document.getElementById(in_id_day); //選択日付の退避 var selectDay = elemntDay.value; //月末日を取得 var lastDay = getLastDay(elemntYear.value, elemntMonth.value); //コンボボックスの更新 reloadDateCombo(in_id_year, in_id_month, in_id_day); if(selectDay != "") { if(selectDay > lastDay) selectDay = lastDay; elemntDay.value = selectDay; //datepickerへ適用 elemntDatepicker.value = elemntYear.value + "/" + elemntMonth.value + "/" + elemntDay.value; } //表示更新 $("#" + in_id_year).selectmenu("refresh"); $("#" + in_id_month).selectmenu("refresh"); $("#" + in_id_day).selectmenu("refresh"); } /** * jQuery:datepickerの変更処理。 * 連動するコンボボックスの変更処理ですな。 * @param in_id_dtp コントロールID/datepicker * @param in_id_year コントロールID/年コンボ * @param in_id_month コントロールID/月コンボ * @param in_id_day コントロールID/日コンボ */ function SelectChangeDatepicker(in_id_dtp, in_id_year, in_id_month, in_id_day) { //IDからオブジェクト取得 var elemntDatepicker = document.getElementById(in_id_dtp); var elemntYear = document.getElementById(in_id_year); var elemntMonth = document.getElementById(in_id_month); var elemntDay = document.getElementById(in_id_day); //datepickerから設定日付取得 var datevalue = elemntDatepicker.value.split("/"); var year = 0; var month = 0; var day = 0; if(datevalue.length == 3) { year = parseInt(datevalue[0], 10); month = parseInt(datevalue[1], 10); day = parseInt(datevalue[2], 10); //コンボボックスに反映する elemntYear.value = year; elemntMonth.value = month; //年月を設定した時点で日コンボ作成 reloadDateCombo(in_id_year, in_id_month, in_id_day); //末日設定後に日付設定 elemntDay.value = day; } else { elemntYear.value = ""; elemntMonth.value = ""; elemntDay.value = ""; } //表示更新 $("#" + in_id_year).selectmenu("refresh"); $("#" + in_id_month).selectmenu("refresh"); $("#" + in_id_day).selectmenu("refresh"); $("#" + in_id_day).trigger("change"); }