关于easyui datagrid 中日期显示问题

来源:互联网 发布:农业科技网络书屋网站 编辑:程序博客网 时间:2024/05/21 07:48

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;              }


原创粉丝点击