一般取得使用者輸入的日期字串,只要不要太奇怪的格式,幾乎都可以使用new Date(‘user-input-date’);來將字串轉換成js的日期物件,如此才能進行比對
但是在ie,日期格式支援比較少,需要轉換成它能讀取的格式,參考這個網頁,答案提供一個好的函數來轉換字串
[code lang=”javascript”]
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;
}
[/code]
轉換後的字串,就能使用new Date();來轉換成日期物件
接著,將例假日存到陣列裡面,利用程式比對,一般只要使用indexOf()來比對就可以,但在舊版的IE一樣不支援,所以可以導入jQuery,使用它的物件$.inArray來比對,以下完整檢查假日函數
[code lang=”javascript”]
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;
}
[/code]
註:這裡只檢查今年的,明年的例假日都要在手動更改