2010年8月15日 星期日

jQuery UI 1.8 datepicker 搭配民國年

最近在使用 jQuery UI 的時候,針對 datepicker widget 想要設定成民國的型式

查找到一篇有用的文章,點我連結

不過該內容是針對 UI 1.7.2 所寫,而我使用的 UI 是較新的版本,

因此就改寫了部份語法,在這邊跟大家分享一下

主要我跟 Charlie 一樣,都改寫了_generateMonthYearHeader

它主要的用途就是顯示年份與月份的下拉式選單,不過我是直接將原先的寫法覆寫,

因此如果沒有引用此 JS 檔時,不會影響到暨有的 datepicker!

接著我額外再覆寫了_formatDate_setDateFromField

前者的目的就是顯示民國年的格式,後者則是為了日期改變時,重新選擇日期能夠停留在正確的日期上!

由於前兩個函數 Charlie 都已經有介紹過了,因此在這邊我額外針對 _setDateFromField 做說明,詳情如下程式碼:


_setDateFromField : function(inst)

{
//假設日期格式已經是民國年格式,Ex: 99-08-14
var dateFormat = this._get(inst, 'dateFormat');

var dates = inst.input ? inst.input.val() : null;

inst.endDay = inst.endMonth = inst.endYear = null;

var date = defaultDate = this._getDefaultDate(inst);

var settings = this._getFormatConfig(inst);

try

{

var dateArr = dates.split("-");
// 將民國年份轉為西元年才能 new Date 物件
var year = parseInt(dateArr[0], 10) + 1911;

var month = parseInt(dateArr[1], 10) - 1;

var day = parseInt(dateArr[2], 10);

date = new Date(year, month, day);

} catch (event)

{

this.log(event);

date = defaultDate;

}
//設定相關資料
inst.selectedDay = date.getDate();

inst.drawMonth = inst.selectedMonth = date.getMonth();

inst.drawYear = inst.selectedYear = date.getFullYear();

inst.currentDay = (dates ? date.getDate() : 0);

inst.currentMonth = (dates ? date.getMonth() : 0);

inst.currentYear = (dates ? date.getFullYear() : 0);

this._adjustInstDate(inst);

}

點我下載原始碼

6 則留言:

  1. 這個拿來用在 jQuery 1.6.2, jQuery ui 1.8.16 會有問題嗎?

    回覆刪除
  2. 不好意思, 我沒有針對這個版本進行過測試
    但是我想應該也是可以使用才對,除非他已經改呼叫其它函數
    如果有什麼問題也歡迎你分享給大家知道,謝謝

    回覆刪除
  3. 試過了 jQuery UI 1.8.16 不 work.
    這是我改的 http://goo.gl/cBGrf

    回覆刪除
  4. 謝謝Eddie兄提供的程式碼,感恩啦

    回覆刪除
  5. 可以改為 101/01/01 鈄線方式 ?

    回覆刪除
  6. 可以參考chineseDatepicker.js中函數_formatDate,將return的"-"置換為"/"

    回覆刪除