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

EasyUI是一套比较轻巧易用的Jquery控件,在使用过程中遇到一个问题,它的列表控件——datagrid, 在显示日期列的时候,由于后台返回给页面的数据是Json格式的,其中的日期字段,在后台是正常的“2012-11-10 12:18:00”这样的格式,json序列化后返回到前台页面就被转换成一个像 /Date(1419264000000)/的格式,导致easyUI无法解析这个字段。经过一番研究,自己捣鼓出来一个解决方案:

完整Demo文件:dateboxFormat-demo

(以下所有代码都是前台页面的JS代码)

1.定义方法使日期列的显示符合阅读习惯:

  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.上面用到的日期处理方法

  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. else if (value.indexOf('/Date') > -1) {
  14. value = value.replace(/\/Date\//, '$1');
  15. dt = new Date();
  16. dt.setTime(value);
  17. } else if (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行编辑时,日期控件内的时间格式正确显示:

  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: function (target) {
  32. return $(target).datetimebox('getValue');
  33. },
  34. setValue: function (target, value) {
  35. $(target).datetimebox('setValue', formatDateBoxFull(value));
  36. },
  37. resize: function (target, width) {
  38. $(target).datetimebox('resize', width);
  39. }
  40. }
  41. });

4.前面的准备工作做好后,接下来就是将前面写的 formatDatebox 方法应用到控件 ,datagrid控件的列属性里面有一个formatter成员,用来自定义列的显示方法。把步骤1中定义的那个 formatDatebox或formatDateboxFull方法名关联到这个成员就可以了。

(这里只截取部分代码,相信正在用这个控件的朋友一看就明白了)

  1. $('#dg').datagrid({
  2. columns: [[
  3. { field: 'StartDate', title: '开工日期', width: 80, formatter:formatDatebox, editor: 'datebox' },
  4. { field: 'CompletedDate', title: '竣工日期', width: 80, formatter:formatDateboxFull, editor: 'datetimebox' },

你可以把前面三个步骤的代码拷贝到一个JS文件里面,在页面进行关联,然后页面应用一下其中的formatDatebox方法。

easyUI的datagrid控件日期列格式化的更多相关文章

  1. easyUI的datagrid控件日期列不能正确显示Json格式数据的解决方案

    EasyUI是一套比较轻巧易用的Jquery控件,在使用过程中遇到一个问题,它的列表控件——datagrid, 在显示日期列的时候,由于后台返回给页面的数据是Json格式的,其中的日期字段,在后台是正 ...

  2. easyui 中Datagrid 控件在列较多且无数据时,列显示不全的解决方案

    在onLoadSuccess 中加入如下代码就OK啦 $('#dg3').datagrid({ onLoadSuccess:function(data){ if(data.total==0){ var ...

  3. EasyUI 中 DataGrid 控件 列 如何绑定对象中的属性

    EasyUI 中 DataGrid 控件 是我们经常用到的控件之一, 但是 DataGrid 控件 在绑定显示列时却不支持对象属性绑定. 模型如下: public class Manager impl ...

  4. EasyUI:datagrid控件简介

    EasyUI:datagrid控件简介 1,水平滚动条属性: //显示滚动条 fitColumns:false //不显示滚动条 fitColumns:true

  5. EasyUI中datagrid控件的使用 设置多行表头(两行或多行)

    EasyUI中的datagrid控件十分强大,能生成各种复杂的报表,现在因为项目需要,需要生成一个表头两行的表,找了一些说明文档,以下用一个实例来说明一下: 第一种方法: $('#divData'). ...

  6. 自定义EasyUI的datetimebox控件日期时间的显示格式(转)

    工作中遇到的问题,在此记录一下. 需求:前台页面使用了EasyUI框架,在某一个html页面中要求datetimebox显示格式为年月日和小时,如图所示: 尝试过两种方法,分别如下: 第一种方法: d ...

  7. 关于EasyUI中DataGrid控件的一些使用方法总结

    一,DataGrid         控件的工作流程 1,通过JavaScript将一个空白的div美化成一个空白的Datagrid模板 2,Datagrid模板通过制定的Url发送请求,获取数据   ...

  8. DataGrid控件的列

    四种列(局限性较大)https://www.cnblogs.com/lonelyxmas/p/9442604.html 更强大的模板列(如控件居中等)https://www.cnblogs.com/l ...

  9. 基于MVC4+EasyUI的Web开发框架经验总结(13)--DataGrid控件实现自动适应宽带高度

    在默认情况下,EasyUI的DataGrid好像都没有具备自动宽度的适应功能,一般是指定像素宽度的,但是使用的人员计算机的屏幕分辨率可能不一样,因此导致有些地方显示太大或者太小,总是不能达到好的预期效 ...

随机推荐

  1. C# 常用类库说明

    Array类 用括号声明数组是C#中使用Array类的记号.在后台使用C#语法,会创建一个派生于抽象基类Array的新类.这样,就可以使用Array类为每个C#数组定义的方法和属性了. Array类实 ...

  2. vs2010 回车、退格键等不能用

    有时候在vs2010中,突然回退键.回车键.方向键就用不了了,百度一堆方法,最后找到按Alt+Enter,就可以用了.

  3. JavaScript笔记(1)

    1.JavaScript的基本概念 JavaScript是一个解释型的脚本语言 JavaScript可以写在HTML文档内部的任何地方 行内式 内嵌式 链入式:<script src=" ...

  4. JavaScript和Java是不同公司开发的不同产品

    首先,JavaScript和Java是不同公司开发的不同产品.javascript是Netscape的产品.它的目的是扩展Netscape Navigator功能,开发一种可以嵌入到网页中的对象和事件 ...

  5. GitLab 部署及管理员账号初始化

    Linux系统搭建GitLab---阿里云Centos7搭建Gitlab踩坑一.简介GitLab,是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的Git项目仓库,可通过We ...

  6. shell脚本中的EOF以及文件重定向

    <<EOF  (内容)  EOF  可以把EOF替换成其他东西(分解符)  意思是把内容当作标准输入传给程序 这里再简要回顾一下<<的用法.当Shell看到<<的时 ...

  7. Hadoop_10_HDFS 的 DataNode工作机制

    1.DataNode的工作机制: 1.DataNode工作职责:存储管理用户的文件块数据  定期向namenode汇报自身所持有的block信息(通过心跳信息上报) (这点很重要,因为,当集群中发生某 ...

  8. C# NET 微信临时素材上传

    最近在做这个,一开始也是不明白为什么给个URL带着两个参数就直接上传了,网上看了很多都是PHP,但是PHP没看过是不会 的 所以就一直在找网上什么Demo之类的讲解,最后还是不错找到了一个比较好理解的 ...

  9. dedecms织梦系统后台验证码图片不显示的解决方法

    网站迁移后,dedecms织梦系统后台验证码图片不显示的解决方法通用解决方案-取消后台验证码功能因为没有验证码,不能进后台,所以修改php文件源代码:方法一:打开dede/login.php 找到如下 ...

  10. Ruby 中的闭包-代码块

    看了一片文章https://ruby-china.org/topics/38385讲closure的. 写下一些感想: 闭包就是 一个函数能够记住和存取它的lexical作用域,即使这个函数是在它的l ...