在EXT中经常会遇到时间格式的初始化,编辑,保存的情况,其中时间格式也有精确度不同。下面介绍一下工作中遇到的一点问题及解决方法:[用到的控件为DateTimeField,为一个扩展控件,可以去网上下,也可以在我的资源里找,可以精确到秒]
如下图,是一个简单的EditorGridPanel,里面最后一列需要初始化一个时间格式的字段。
按平时正常的写法应该如下:
或者是这样:
这样的写法感觉应该没错,在ColunmModel里初始数据信息,时间格式的信息也会在renderer被格式化,但实际上显示的结果却并并不是时间格式的,而是“NaN-NaN-NaN”,这是为什么呢。原因如下:
让我们来看看Ext.format.dateRenderer的源代码:
//
dateRenderer : function(format) {
return function(v) {
return Ext.util.Format.date(v, format);、
}
}
我们从后台传来的值[字符串又被格式化了一次],因为传来的值已经是字符串格式,不是时间格式的,所有会出现此问题。
修改:如果只是单纯的显示的话,只需要把第二种方法中的Jsonreader中的字段的类型 type:'date' 修改成 type:'string'这样就可以了,可以正确的时间格式了。
但这是一个EditorGridPanel,还需要对时间进行编辑。选择了时间编辑器以后,如下图:
选择完成之后,会显示如下格式的时间字段:Fri Aug 28 09:37:46 GMT + 0008[GMT时间格式],这是因为在renderer的对时间进行格式化时候出现了问题,因为从后台的时候不需要格,从时间编辑器里传值的时候需要格,有一个矛盾的过程,其实修改一下renderer属性即可:
renderer:function(value){
if(value instanceof Date){
return new Date(value).format("Y-m-d H:i:s");
}else{
return value;
}
}
对传的值进行一下判断!~~然后确定需要不需要格。
备注:不知道为什么,显示时间格式是正确,往后台传值保存的时候,却又是GMT时间格式的,需要在后台对那个GMT时间格式的字符串进行一个判断格式为正确的时间格式(y:M:d hh:mi:ss):