[jQuery]從日期字串檢查假日

一般取得使用者輸入的日期字串,只要不要太奇怪的格式,幾乎都可以使用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;
}

註:這裡只檢查今年的,明年的例假日都要在手動更改

Leave a Reply

你的電子郵件位址並不會被公開。