Sunday, September 04, 2011

jQuery UI Datepicker 1.8.16 民國年 Extender



jQuery UI Datepicker 1.8.16 民國年 Extender


Code Snippet



  1. /*
    * jQuery UI Datepicker 1.8.16
    * Taiwan's Minguo calendar extender
    * This extender modified the year to Taiwan's Minguo calendar
    * Extended by Eddie Chen
  2. */
  3. $.extend($.datepicker,{

  4. /* Parse existing date and initialise date picker. */

  5. _setDateFromField: function(inst, noDefault) {

  6. if (inst.input.val() == inst.lastVal) {

  7. return;

  8. }

  9. var dateFormat = this._get(inst, 'dateFormat');

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

  11. var date, defaultDate;

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

  13. var settings = this._getFormatConfig(inst);

  14. try {

  15. //date = this.parseDate(dateFormat, dates, settings) || defaultDate;

  16. if(dates.couny>0)

  17. {

  18. var dateArr = dates.split("/");

  19. var year = parseInt(dateArr[0], 10) + 1911;

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

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

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

  23. }

  24. } catch (event) {

  25. this.log(event);

  26. dates = (noDefault ? '' : dates);

  27. }

  28. inst.selectedDay = date.getDate();

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

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

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

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

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

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

  35. this._adjustInstDate(inst);

  36. },

  37. _daylightSavingAdjust: function(date) {

  38. if (!date) return null;

  39. date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0);


  40. if (!date) return null;

  41. if((date.getFullYear()-1911)>0)

  42. date.getFullYear((date.getFullYear()-1911));

  43. else

  44. date.getFullYear((date.getFullYear()));


  45. return date;

  46. },

  47. _taiwanDateAdjust: function(date) {

  48. if (!date) return null;

  49. if((date.getFullYear()-1911)>0)

  50. date.setFullYear((date.getFullYear()-1911),date.getMonth(),date.getDay());

  51. else

  52. date.setFullYear((date.getFullYear()),date.getMonth(),date.getDay());

  53. return date;

  54. },

  55. /* Generate the month and year header. */

  56. _generateMonthYearHeader: function(inst, drawMonth, drawYear, minDate, maxDate,

  57. secondary, monthNames, monthNamesShort) {

  58. var changeMonth = this._get(inst, 'changeMonth');

  59. var changeYear = this._get(inst, 'changeYear');

  60. var showMonthAfterYear = this._get(inst, 'showMonthAfterYear');

  61. var html = '<div class="ui-datepicker-title">';

  62. var monthHtml = '';

  63. // month selection

  64. if (secondary || !changeMonth)

  65. monthHtml += '<span class="ui-datepicker-month">' + monthNames[drawMonth] + '</span>';

  66. else {

  67. var inMinYear = (minDate && minDate.getFullYear() == drawYear);

  68. var inMaxYear = (maxDate && maxDate.getFullYear() == drawYear);

  69. monthHtml += '<select class="ui-datepicker-month" ' +

  70. 'onchange="DP_jQuery_' + dpuuid + '.datepicker._selectMonthYear(\'#' + inst.id + '\', this, \'M\');" ' +

  71. '>';

  72. for (var month = 0; month < 12; month++) {

  73. if ((!inMinYear || month >= minDate.getMonth()) &&

  74. (!inMaxYear || month <= maxDate.getMonth()))

  75. monthHtml += '<option value="' + month + '"' +

  76. (month == drawMonth ? ' selected="selected"' : '') +

  77. '>' + monthNamesShort[month] + '</option>';

  78. }

  79. monthHtml += '</select>';

  80. }

  81. if (!showMonthAfterYear)

  82. html += monthHtml + (secondary || !(changeMonth && changeYear) ? '&#xa0;' : '');

  83. // year selection

  84. if ( !inst.yearshtml ) {

  85. inst.yearshtml = '';

  86. if (secondary || !changeYear)

  87. if((drawYear-1911) >0)

  88. html += '<span class="ui-datepicker-year">' + (drawYear-1911) + '</span>';

  89. else

  90. html += '<span class="ui-datepicker-year">' + drawYear + '</span>';

  91. else {

  92. // determine range of years to display

  93. var years = this._get(inst, 'yearRange').split(':');

  94. var thisYear = new Date().getFullYear();

  95. var determineYear = function(value) {

  96. var year = (value.match(/c[+-].*/) ? drawYear + parseInt(value.substring(1), 10) :

  97. (value.match(/[+-].*/) ? thisYear + parseInt(value, 10) :

  98. parseInt(value, 10)));

  99. return (isNaN(year) ? thisYear : year);

  100. };

  101. var year = determineYear(years[0]);

  102. var endYear = Math.max(year, determineYear(years[1] || ''));

  103. year = (minDate ? Math.max(year, minDate.getFullYear()) : year);

  104. endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear);

  105. inst.yearshtml += '<select class="ui-datepicker-year" ' +

  106. 'onchange="DP_jQuery_' + dpuuid + '.datepicker._selectMonthYear(\'#' + inst.id + '\', this, \'Y\');" ' +

  107. '>';


  108. if((drawYear-1911) >0)

  109. {

  110. for (; year <= endYear; year++) {

  111. inst.yearshtml += '<option value="' + year + '"' +

  112. (year == drawYear ? ' selected="selected"' : '') +

  113. '>' + (year-1911) + '</option>';

  114. }

  115. }

  116. else

  117. {

  118. for (; year <= endYear; year++) {

  119. inst.yearshtml += '<option value="' + year + '"' +

  120. (year == drawYear ? ' selected="selected"' : '') +

  121. '>' + (year) + '</option>';

  122. }

  123. }

  124. inst.yearshtml += '</select>';


  125. html += inst.yearshtml;

  126. inst.yearshtml = null;

  127. }

  128. }

  129. html += this._get(inst, 'yearSuffix');

  130. if (showMonthAfterYear)

  131. html += (secondary || !(changeMonth && changeYear) ? '&#xa0;' : '') + monthHtml;

  132. html += '</div>'; // Close datepicker_header

  133. return html;

  134. },

  135. _formatDate : function(inst, day, month, year)


  136. {


  137. if (!day)


  138. {


  139. inst.currentDay = inst.selectedDay;


  140. inst.currentMonth = inst.selectedMonth;


  141. inst.currentYear = inst.selectedYear;


  142. }


  143. var date = (day ? (typeof day == 'object' ? day :


  144. this._daylightSavingAdjust(new Date(year, month, day))) :


  145. this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay)));


  146. return (date.getFullYear() - 1911) + "/" +


  147. (date.getMonth() < 9 ? "0" + (date.getMonth() + 1) : (date.getMonth() + 1)) + "/" +


  148. (date.getDate() < 10 ? "0" + date.getDate() : date.getDate());


  149. }

  150. });