1. 程式人生 > >easyUI的datagrid控制元件日期列格式化

easyUI的datagrid控制元件日期列格式化

轉自:https://blog.csdn.net/idoiknow/article/details/8136093

EasyUI是一套比較輕巧易用的Jquery控制元件,在使用過程中遇到一個問題,它的列表控制元件——datagrid, 在顯示日期列的時候,由於後臺返回給頁面的資料是Json格式的,其中的日期欄位,在後臺是正常的“2012-11-10 12:18:00”這樣的格式,json序列化後返回到前臺頁面就被轉換成一個像 /Date(1419264000000)/的格式,導致easyUI無法解析這個欄位。經過一番研究,自己搗鼓出來一個解決方案:

(以下所有程式碼都是前臺頁面的JS程式碼)

1.定義方法使日期列的顯示符合閱讀習慣:

[javascript]
 view plain copy
  1. function formatDatebox(value) {  
  2.     if (value == null || value == '') {  
  3.         return'';  
  4.     }  
  5.     var dt = parseToDate(value);//關鍵程式碼,將那個長字串的日期值轉換成正常的JS日期格式
  6.     return dt.format("yyyy-MM-dd"); //這裡用到一個javascript的Date型別的拓展方法,這個是自己新增的拓展方法,在後面的步驟3定義
  7. }  
  8. /*帶時間*/
  9. function formatDateBoxFull(value) {  
  10.     if (value == null || value == '') {  
  11.         return'';  
  12.     }  
  13.     var dt = parseToDate(value);  
  14.     return dt.format("yyyy-MM-dd hh:mm:ss");  
  15. }  

2.上面用到的日期處理方法

[javascript] view plain copy
  1. function parseToDate(value) {  
  2.     if (value == null || value == '') {  
  3.         return undefined;   
  4.     }  
  5.     var
     dt;  
  6.     if (value instanceof Date) {  
  7.         dt = value;  
  8.     }  
  9.     else {  
  10.         if (!isNaN(value)) {  
  11.             dt = new Date(value);  
  12.         }  
  13.         elseif (value.indexOf('/Date') > -1) {  
  14.             value = value.replace(/\/Date(?\d+)(−?\d+)\//, '$1');
  15.             dt = new Date();  
  16.             dt.setTime(value);  
  17.         } elseif (value.indexOf('/') > -1) {  
  18.             dt = new Date(Date.parse(value.replace(/-/g, '/')));  
  19.         } else {  
  20.             dt = new Date(value);  
  21.         }  
  22.     }  
  23.     return dt;  
  24. }  
  25. //為Date型別拓展一個format方法,用於格式化日期
  26. Date.prototype.format = function (format) //author: meizz 
  27. {  
  28.     var o = {  
  29.         "M+"this.getMonth() + 1, //month 
  30.         "d+"this.getDate(),    //day 
  31.         "h+"this.getHours(),   //hour 
  32.         "m+"this.getMinutes(), //minute 
  33.         "s+"this.getSeconds(), //second 
  34.         "q+": Math.floor((this.getMonth() + 3) / 3),  //quarter 
  35.         "S"this.getMilliseconds() //millisecond 
  36.     };  
  37.     if (/(y+)/.test(format))  
  38.         format = format.replace(RegExp.$1,  
  39.                 (this.getFullYear() + "").substr(4 - RegExp.$1.length));  
  40.     for (var k in o)  
  41.         if (new RegExp("(" + k + ")").test(format))  
  42.             format = format.replace(RegExp.$1,  
  43.                     RegExp.$1.length == 1 ? o[k] :  
  44.                         ("00" + o[k]).substr(("" + o[k]).length));  
  45.     return format;  
  46. };  

3.步驟1定義的方法讓控制元件在閱讀狀態下的顯示得到糾正,但dataGrid控制元件還有行編輯狀態,行編輯狀態下還是會出現日期不能正常顯示的狀況,

此時需要拓展datagrid方法(這裡說成重寫比較貼切),使datagrid行編輯時,日期控制元件內的時間格式正確顯示:

[javascript] view plain copy
  1. $.extend(  
  2.     $.fn.datagrid.defaults.editors, {  
  3.         datebox: {  
  4.             init: function (container, options) {  
  5.                 var input = $('<input type="text">').appendTo(container);  
  6.                 input.datebox(options);  
  7.                 return input;  
  8.             },  
  9.             destroy: function (target) {  
  10.                 $(target).datebox('destroy');  
  11.             },  
  12.             getValue: function (target) {  
  13.                 return $(target).datebox('getValue');  
  14.             },  
  15.             setValue: function (target, value) {  
  16.                 $(target).datebox('setValue', formatDatebox(value));  
  17.             },  
  18.             resize: function (target, width) {  
  19.                 $(target).datebox('resize', width);  
  20.             }  
  21.         },  
  22.         datetimebox:{  
  23.             init: function (container, options) {  
  24.                 var input = $('<input type="text">').appendTo(container);  
  25.                 input.datetimebox(options);  
  26.                 return input;  
  27.             },  
  28.             destroy: function (target) {  
  29.                 $(target).datetimebox('destroy');  
  30.             },  
  31.             getValue: