在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):