關於easyui datagrid 中日期顯示問題

easyui datagrid 日期時間顯示不正常,

原因: 後臺Java 類型爲 DATE 經過JSON工具轉化後傳到前臺來就亂了

兩種思路: 1: 還沒進行json處理之前就給專程string

                   2.  到了前臺再轉回來。


解決方案一:

  1. {field:'issueTime',title:'生效時間',  
  2.                      formatter:function(value,row,index){  
  3.                          var unixTimestamp = new Date(value);  
  4.                          return unixTimestamp.toLocaleString();  
  5.                          }  
  6.  }, 

解決方案二:

 爲了克服數據中時間爲空的情況,我們可以考慮使用前臺js解析返回的json數據。

            第一步、我們先定義一個方法,使日期列正常顯示,js代碼如下:

[javascript] view plain copy print?
  1. function formatDatebox(value) {  
  2.     if (value == null || value == '') {  
  3.         return '';  
  4.     }  
  5.     var dt;  
  6.     if (value instanceof Date) {  
  7.         dt = value;  
  8.     }  
  9.     else {  
  10.         dt = new Date(value);  
  11.         if (isNaN(dt)) {  
  12.             value = value.replace(/\/Date(?\d+)\//, '$1'); //標紅的這段是關鍵代碼,將那個長字符串的日期值轉換成正常的JS日期格式  
  13.             dt = new Date();  
  14.             dt.setTime(value);  
  15.         }  
  16.     }  
  17.   
  18.     return dt.format("yyyy-MM-dd");   //這裏用到一個javascript的Date類型的拓展方法,這個是自己添加的拓展方法,在後面的步驟3定義  
  19. }  
            第二步、前面那個方法只是讓控件在普通狀態下的顯示得到糾正,但dataGrid控件還有行編輯狀態,行編輯狀態下還是會出現日期不能正常顯示的狀況,此時需要拓展datagrid方法(這裏說成重寫比較貼切),使datagrid行編輯時,日期控件內的時間格式正確顯示:

[javascript] view plain copy print?
  1. $.extend(  
  2.     $.fn.datagrid.defaults.editors, {  
  3.         datebox: {  
  4.             init: function (container, options) {  
  5.                 var input = $('').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.     });  
            第三步、爲原始Date類型拓展format一個方法,用於日期顯示的格式化
[javascript] view plain copy print?
  1. Date.prototype.format = function (format)   
  2. {  
  3.     var o = {  
  4.         "M+"this.getMonth() + 1, //month   
  5.         "d+"this.getDate(),    //day   
  6.         "h+"this.getHours(),   //hour   
  7.         "m+"this.getMinutes(), //minute   
  8.         "s+"this.getSeconds(), //second   
  9.         "q+": Math.floor((this.getMonth() + 3) / 3),  //quarter   
  10.         "S"this.getMilliseconds() //millisecond   
  11.     }  
  12.     if (/(y+)/.test(format)) format = format.replace(RegExp.$1,  
  13.     (this.getFullYear() + "").substr(4 - RegExp.$1.length));  
  14.     for (var k in o) if (new RegExp("(" + k + ")").test(format))  
  15.         format = format.replace(RegExp.$1,  
  16.       RegExp.$1.length == 1 ? o[k] :  
  17.         ("00" + o[k]).substr(("" + o[k]).length));  
  18.     return format;  
  19. }  
          第四步、前面的準備工作做好後,接下來就是將前面寫的 formatDatebox 方法應用到控件,datagrid控件的列屬性裏面有一個formatter成員,用來自定義列的顯示方法。把步驟1中定義的那個 formatDatebox 方法名關聯到這個成員就可以了。頁面內Js如下
[javascript] view plain copy print?
  1. function initTable(queryData) {  
  2.              $('#test').datagrid({   //定位到Table標籤,Table標籤的ID是test  
  3.                  fitColumns: true,  
  4.                  url: '/OperationLog/QueryLog',   //指向後臺的Action來獲取當前用戶的信息的Json格式的數據  
  5.                  title: '日誌信息查詢',  //標識  
  6.                  iconCls: 'icon-save',  
  7.                  height:335,  
  8.                  nowrap: true,  
  9.                  autoRowHeight: false,  
  10.                  striped: true,  
  11.                  collapsible: true,  
  12.                  pagination: true,  
  13.                  rownumbers: true,  
  14.                  //sortName: 'ID',    //根據某個字段給easyUI排序  
  15.                  //sortOrder: 'asc',  
  16.                  remoteSort: false,  
  17.                  //idField: 'number',  
  18.                  queryParams: queryData,  //異步查詢的參數  
  19.                  columns: [[  
  20.                      { title: '操作人', field: 'userID',sortable: true,},  
  21.                      { title: '操作類型', field: 'operatorType', sortable: true, },  
  22.                      { title: '檔案人姓名', field: 'userName', sortable: true, },  
  23.                      { title: '操作時間', field: 'operatorTime', formatter: formatDatebox, editor: 'datebox', sortable: true, width: 10, }  
  24.                  ]],  
  25.              });  
  26.          }  
  27.     </script> 

我最後是這麼做的:

{field:'kkny',title:'開考年月',width:150,formatter:function(value,row,index){  
						                        var unixTimestamp = new Date(value);  
						                         return unixTimestamp.toLocaleString();  
						                   }}

function datetoLocal(value){
                 var unixTimestamp = new Date(value);
                var year = unixTimestamp.getFullYear();
                var month= unixTimestamp.getMonth()+1;
                var day = unixTimestamp.getDate()+1;
                var hours = unixTimestamp.getHours()+1 ;
                var minutes = unixTimestamp.getMinutes()+1 ;    
                var seconde = unixTimestamp.getSeconds()+1;
                var result = year+"-"+month+"-"+day +"  "+hours+":"+minutes+":"+seconde;
                return result;  
            }


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章