EasyUI的DataGrid日期列(datebox)正确显示json时间格式

问题描述:

前端使用EasyUI,后台使用Spring MVC, 数据库里面存储的时间格式为:2014-06-10,但是后台返回给前台页面的数据是json格式的,类似于:1402367297000的形式,日期列datebox是无法解析的。具体如下图:

自己也是EasyUI小白,网上查查资料,倒腾下总算搞出来了,这里做下记录。

一般情况下我们所需的日期格式都是:2014-02-02或者2014/09/09形式的,因此首先要考虑实现一个添加日期格式化的插件。

jQuery日期格式化

在自己的js中添加代码来扩展jQuery,代码如下:

Date.prototype.format = function(format) {
	var o = {
		"M+" : this.getMonth() + 1, // 月
		"d+" : this.getDate(), // 天
		"h+" : this.getHours(), // 时
		"m+" : this.getMinutes(), // 分
		"s+" : this.getSeconds(), // 秒
		"q+" : Math.floor((this.getMonth() + 3) / 3), // 刻
		"S" : this.getMilliseconds() //毫秒
	// millisecond
	}
	if (/(y+)/.test(format))
		format = format.replace(RegExp.$1, (this.getFullYear() + "")
				.substr(4 - RegExp.$1.length));
	for ( var k in o)
		if (new RegExp("(" + k + ")").test(format))
			format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k]
					: ("00" + o[k]).substr(("" + o[k]).length));
	return format;
}

这样,就为jQuery添加上了日期格式化的功能了。可以简单的试试能否格式化成功:

示例代码:

<html>
<script>
    Date.prototype.format = function(format) {
        var o = {
            "M+": this.getMonth() + 1, // month
            "d+": this.getDate(), // day
            "h+": this.getHours(), // hour
            "m+": this.getMinutes(), // minute
            "s+": this.getSeconds(), // second
            "q+": Math.floor((this.getMonth() + 3) / 3), // quarter
            "S": this.getMilliseconds()
            // millisecond
        }
        if (/(y+)/.test(format))
            format = format.replace(RegExp.$1, (this.getFullYear() + "")
                .substr(4 - RegExp.$1.length));
        for (var k in o)
            if (new RegExp("(" + k + ")").test(format))
                format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length));
        return format;
    }
</script>

<body>
    <script>
        var date = new Date();
		console.info(date);
        console.info(date.format("yyyy-MM-dd hh:mm"));
    </script>
</body>

</html>

控制台输出结果:

可以看见的是,时间格式已经转换为我们需要的格式了。

formatDatebox

上述示例代码中,我们还是需要指定format,这里先抽象出一个formatDatebox函数,用于显示日期.

function formatDatebox(value) {
            if (value == null || value == '') {
                return '';
            }
            var dt;
            if (value instanceof Date) {
                dt = value;
            } else {

                dt = new Date(value);

            }

            return dt.format("yyyy-MM-dd"); //扩展的Date的format方法(上述插件实现)
        }

同样我们简单的测试下:

console.info(formatDatebox(1402367297000));

"1402367297000"是时间格式的json形式,最后输出的结果为:2014-06-10。测试通过。

datebox指定formatter

前面的准备工作做完了,接下来就是将formatDatebox函数运用到datebox中去了,很简单,只需指定datagrid空间的列属性的fomatter为formatDatebox函数即可。

如下例子:

columns: [
                {
                    field: 'updateTime',
                    title: '更新时间',
                    formatter: formatDatebox,
                    sortable: true,
                    editor: 'datebox'
                }
                ]
         ]

之后即可看见现实效果为我们所需效果。

不过,还远远没有结束呢?根据上面的代码也发现了,我们可是是实现了行编辑的,当我们双击一条记录的时候,datebox里面的值丢失,而且通过日期选择器获取的格式也不一样。呵呵,这里我们就需要重写datagrid方法,使得datagrid行编辑时,日期控件内的时间格式正确显示,且不丢失数据,代码如下:

$.extend($.fn.datagrid.defaults.editors, {
	datebox : {
		init : function(container, options) {
			var input = $('<input type="text">').appendTo(container);
			input.datebox(options);
			return input;
		},
		destroy : function(target) {
			$(target).datebox('destroy');
		},
		getValue : function(target) {
			return $(target).datebox('getValue');//获得旧值
		},
		setValue : function(target, value) {
			console.info(formatDatebox(value));
			$(target).datebox('setValue', formatDatebox(value));//设置新值的日期格式
		},
		resize : function(target, width) {
			$(target).datebox('resize', width);
		}
	}
});

完成之后的效果见下图:

OK,大概就是这么多了,抱歉的是这里没有提供一个完整的demo,因为涉及到后台的交互,本来可以使用静态数据来模拟展示,但是时间不够,也没多大的兴致再去实现一遍了。先就到这儿了。

参考:http://www.kuaipao8.com/?p=323

http://blog.csdn.net/j2eevic/article/details/7395290

EasyUI的DataGrid日期列(datebox)正确显示json时间格式

时间: 2024-11-02 23:20:36

EasyUI的DataGrid日期列(datebox)正确显示json时间格式的相关文章

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

EasyUI是一套比较轻巧易用的Jquery控件,在使用过程中遇到一个问题,它的列表控件——datagrid, 在显示日期列的时候,由于后台返回给页面的数据是Json格式的,其中的日期字段,在后台是正常的“2012-11-10 12:18:00”这样的格式,json序列化后返回到前台页面就被转换成一个像 /Date(1419264000000)/的格式,导致easyUI无法解析这个字段.经过一番研究,下面给出两种解决方式 希望能帮到大家! 第一种:比较简单 定义函数:function forma

easyUI的列表控件(datagrid)日期列不能正确显示的解决方法

        一.遇见的问题 EasyUI是一套比较轻巧易用的Jquery控件,在EasyUI中,我认为,他的表格 , 做的堪称完美.但是,美中不足的是,在使用过程中遇到一个问题,它的列表控件--datagrid,在显示日期列的时候,由于后台返回给页面的数据是Json格式的,其中的一个日期字段,在后台还是正常的"2012-11-10 12:18:00"这样的格式,到了前台页面就被转换成一个像 /Date(1242357713797+0800)/ 这样的格式.         二.解决

Django中的日期处理注意事项和自定义时间格式转换

我们在用Django创建models时,常常会涉及时间日期字段的处理,Django里日期相关Field有DateTimeField.DateField和TimeField三种类型,看似简单,但其中有一些容易出错的地方需要注意:另外,如果不习惯Django的默认时间格式,也可以自定义的修改. DateTimeField.DateField和TimeField,其值分别对应着Python里的datetime.datetime.datetime.date和datetime.time三个实例,这三个Fi

Linux环境变量的修改(永久,暂时)以及修改ls显示的时间格式

本文转自:http://blog.sina.com.cn/s/blog_8e21864f01014u9h.html Linux修改环境变量,很简单但很重要 一.Linux的变量种类 按变量的生存周期来划分,Linux变量可分为两类: 1. 永久的:需要修改配置文件,变量永久生效. 2. 临时的:使用export命令行声明即可,变量在关闭shell时失效. 二.设置变量的三种方法 1. 在/etc/profile文件中添加变量[对所有用户生效(永久的)] 用VI在文件/etc/profile文件中

.NET Core 中使用 Humanizer 显示友好时间格式

今天在将一个 .net framework 项目迁移至 .net core 的过程中,在迁移到显示友好时间格式(比如“1分钟前”,“1小时前”)的代码时,找了找看有没有对应的开源库,结果找到了 Humanizer ,顺手体验了一下,感觉不错,在这篇随笔中记录一下. 由于显示的是中文友好时间格式,需要安装 nuget 包 Humanizer.Core.zh-CN . <ItemGroup> <PackageReference Include="Humanizer.Core.zh-

easyUI 中datagrid 返回列隐藏方法

easyui的datagrid方法返回的列,有的值不需要显示可以使用hidden(属性进行隐藏) columns : [ [{ field : 'bailClass', title : '类别', width : 50, align : 'center', formatter : returnFtt },{ field : 'agencyName', title : '市场名称', width : 50, align : 'center' },{ field : 'agencyId', titl

easyui的datagrid的列checkbox自定义增加disabled选项

需求根据权限判断datagrid的每一列的checkBox是否可选,看了下文档,发现editor的checkbox应该能实现这个功能,但我们项目自己将easyui外面包了一层,把原生的editor改成了浮动形式的,并且由外面包那一层那初始化这个浮动的editor.而我要改的地方没有用外面包这样一层,如果用的话会很麻烦,牵扯的地方很多,于是就只有在Column的checkBox属性上想办法了. 看easyui的源代码,找到defaultView的renderRow方法,在渲染checkBox的地方

使用easyUI 为datagrid冻结列

转自http://www.cnblogs.com/javaexam2/archive/2012/08/10/2632648.html 这个示例演示如何冻结一些列,冻结列不能滚动到视图的外部,当用户移动水平滚动条他将穿过grid. 查看 Demo 冻结列你需要定义frozenColumns 属性,frozenColumn 属性和columns 属性一样. $('#tt').datagrid({ title:'Frozen Columns', iconCls:'icon-save', width:5

[Linux] - 修改ls/ll显示的时间格式

1.修改ls显示格式 ls -l --time-style '+%Y/%m/%d %H:%M:%S' drwxr-x--- 2 edwetl edwetl 4096 2019/01/03 21:08:45 arc_test ls -l --time-style '+%Y%m%d %H:%M:%S' drwxr-x--- 2 edwetl edwetl 4096 20190103 21:08:45 arc_test 2.修改配置到bash_profile vi ~/.bash_profile ex