一般取得使用者輸入的日期字串,只要不要太奇怪的格式,幾乎都可以使用new Date(‘user-input-date’);來將字串轉換成js的日期物件,如此才能進行比對
但是在ie,日期格式支援比較少,需要轉換成它能讀取的格式,參考這個網頁,答案提供一個好的函數來轉換字串
function parseISO8601(dateStringInRange) { var isoExp = /^\s*(\d{4})-(\d\d)-(\d\d)\s*$/, date = new Date(NaN), month, parts = isoExp.exec(dateStringInRange); if(parts) { month = +parts[2]; date.setFullYear(parts[1], month - 1, parts[3]); if(month != date.getMonth() + 1) { date.setTime(NaN); } } return date; }
轉換後的字串,就能使用new Date();來轉換成日期物件
接著,將例假日存到陣列裡面,利用程式比對,一般只要使用indexOf()來比對就可以,但在舊版的IE一樣不支援,所以可以導入jQuery,使用它的物件$.inArray來比對,以下完整檢查假日函數
function check_holiday (dt_date) { var n_date = dt_date.getDate(), n_month = dt_date.getMonth() + 1; var s_date1 = n_month + '/' + n_date; var s_day = dt_date.getDay(); // day of the week 0-6 var adjusted_workday = ["1/30", "6/04",//端午補上班 "9/10",//中秋補上班 ]; if ( $.inArray(s_date1, adjusted_workday) > -1 ) return false;//例外上班 if( s_day == 0 || s_day == 6)return true;//週六週日 var holiday = ["1/1", //元旦 "2/8", "2/9", "2/10", "2/11", "2/12", //農曆年 "2/29", //228補假 "4/4", "4/5", //兒童節、清明補假 "6/9", "6/10", //9號端午節 10號彈性放假 "9/15", "9/16", //15號中秋節 16號彈性放假 "10/10" //國慶 ]; if ( $.inArray(s_date1, holiday) > -1 ) return true; return false; }
註:這裡只檢查今年的,明年的例假日都要在手動更改