项目中,前台jqgrid在显示时间时,出现一些问题,弄清楚后记载下来以便碰见同样问题的人
项目中,向jqgrid写出去的是json格式数据,后台是通过jackson对数据格式进行转换的。jagrid时间行代码如下
colModel:[
{name:'id',index:'id', editable:false,hidden:true},
{name:'name',index:'name',label:"角色名", sorttype:"text"},
{name:'createTime',index:'createTime',label:"创建时间", editable:false,formatter:"date",formatoptions: {srcformat:'Y-m-d H:i:s',newformat:'Y-m-d H:i:s'}},
{name:'createBy',index:'createBy',label:"创建人", sortable:false}
],
但在创建时间那一行时间显示为"NaN-NaN-NaN NaN:NaN:NaN" ,后来只带,jaskson默认写出的时间格式是时间戳,在jqgrid里面,用"u" 或"U" 来表示源数据的时间戳格式,因此把以上代码改成如下:
colModel:[
{name:'id',index:'id', editable:false,hidden:true},
{name:'name',index:'name',label:"角色名", sorttype:"text"},
{name:'createTime',index:'createTime',label:"创建时间", editable:false,formatter:"date",formatoptions: {srcformat:'u',newformat:'Y-m-d H:i:s'}},
{name:'createBy',index:'createBy',label:"创建人", sortable:false}
],
改完后,数字是出来了 ,但显示的时间太离谱了,显示为:"44235-11-07 21:10:44" 。 再找资料,才知道,jqgrid主要是支持这php,而php和java在时间戳上有区别, php里面,时间戳用10位数字表示,精确到秒, java里面,时间戳用13位数字表示,精确到毫秒。 才查看jqgrid源码 有那么一段 如下:
if( !isNaN( date - 0 ) && String(format).toLowerCase() == "u") {
//Unix timestamp
timestamp = new Date( parseFloat(date)*1000 );
}
再找,也没看见其他处理时间戳的地方,跟踪js代码,对于从后台拿到的13位时间戳数据也会进入到这里,在乘以1000就编程了16位,这就导致了比原本时间大了很多。 于是乎就修改这一段,如下
if( !isNaN( date - 0 ) && String(format).toLowerCase() == "u") {
//Unix timestamp
timestamp = new Date( parseFloat(date) );
}
修改后,一切显示正常, 如:"2012-04-07 18:13:00" ,
但想着,不能这么去解决问题,这样做,也就意味着到时候换jqgrid js文件时总的改这个地方,修改别人源码,还不知道会出现什么其他问题呢? 知道问题了,那就可以找解决方法了, 主要是在哪一块下手
竟然jagrid对时间戳有这样的处理,对于jaskson是使用,我们项目是封装在一个工具类里面。哪么好,我不向前台给时间戳形式的数据,正好jackson也提供修改时间数据输出格式方法, 于是加了这么一段静态代码,如下:
private static ObjectMapper mapper = new ObjectMapper();
static {
//jackson默认写出的时间数据为时间戳, 这里修改为相应模式的时间数据输出格式
mapper.getSerializationConfig().setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
}
前台页面代码如下:
colModel:[
{name:'id',index:'id', editable:false,hidden:true},
{name:'name',index:'name',label:"角色名", sorttype:"text"},
{name:'createTime',index:'createTime',label:"创建时间", editable:false,formatter:"date",formatoptions: {srcformat:'Y-m-d H:i:s',newformat:'Y-m-d H:i:s'}},
{name:'createBy',index:'createBy',label:"创建人", sortable:false}
],
这样后 时间显示一切正常 "2012-04-07 18:13:00"
分享到:
相关推荐
jqGrid 学习 自定义格式化类型 19 jqGrid 学习 格式化 21 jqGrid 学习 自定义按钮 26 jqGrid 学习 翻页(2) 28 jqGrid 学习 翻页 33 jqGrid 学习 配置 json 35 jqGrid 学习 方法 37 jqGrid 学习 事件 45 jqGrid ...
jquery.jqGrid-4.6.0(jquery表格插件).zip----------jqGrid4.6.0包,官网下载的,原封不动的在这里。 jqgrid_demo40-----可用的-使用方法请查看README文件.rar-----------经我修改过的demo40,官网上面demo40下载...
jqgrid
jqgrid中文文档API,使用JQGRID
jquery.jqGrid-4.8.2(jquery表格插件).zip----------jqGrid4.8.2包,官网下载的,原封不动的在这里。 jqgrid_demo40-----可用的-使用方法请查看README文件. jqgrid_3.6.5_API_en.chm------附加放在这里的其它资料...
这是jqgrid开发的基本格式,很实用的
jquery jqgrid 参数详
JqGrid插件+JqGridDemo+JqGrid主题,自己项目里引入的文件
jquery.jqgrid
JqGrid使用国际化插件实现国际化功能的 demo;
JqGrid中文API文档,包含了基础的JqGrid控件的属性方法事件等,有如何使用JqGrid的Demo.
jqGrid5.5 学习
详细的jqgrid开发手册,是使用jqgrid的程序必备,实例让你的开发事半功倍。
jQgrid+demo
jqgrid4.0jqgrid4.0jqgrid4.0jqgrid4.0jqgrid4.0jqgrid4.0jqgrid4.0jqgrid4.0jqgrid4.0jqgrid4.0
jqGrid demo
jqGrid_API中文
jqgrid 的帮助文档 jqGrid属性
jqGrid日期格式的判断示例代码(开始日期与结束日期)。需要的朋友可以过来参考下,希望对大家有所帮助
jqgrid实现分组显示和统计的功能,jqgrid实现分组显示和统计