Ext中的DateField字段默认显示格式为'm/d/Y',不太符合中国的使用习惯,以'-'号隔开,或直接显示'xxxx年x月x日'的格式,并且在同一个软件系统中,通常情况会希望日期的显示格式都相同,不要在每个页面中单独设置显示样式。
另外,由于后台传输到前台的格式一般都是java中的Date类型,直接传输到前台会因为Ext中的时区设置问题造成转换错。
基于以上原因,扩展Ext中的DateField字段类型,代码如下所示:
justgin.bap.DateFieldEx = Ext.extend(Ext.form.DateField,{
format:"Y-m-d",
initComponent: function() {
this.hideTrigger = this.readOnly;
justgin.bap.DateFieldEx.superclass.initComponent.call(this);
},
setValue:function(value){
var date = this.formatDate2(value);
justgin.bap.DateFieldEx.superclass.setValue.call(this, date);
},
// private ,ext自己有个formatDate方法,因此这里用formatDate2
formatDate2 : function(date){
//CST时间和UTC时差转换
var dateStr=date.toString();
var position=dateStr.indexOf("UTC");
if(position!=-1){
return Ext.util.Format.date(date, this.format);
}else{
var vdate=new Date(date); //后台默认为格林尼治时间,该方法会默认把后台时间认为是北京时间,北京时间比格林尼治时间多14小时。
//找出当地时间偏移值的毫秒数
var localOffset=vdate.getTimezoneOffset()*60000;
var utcOffset= vdate.getTime() + localOffset;
timezone=utcOffset-6*3600000;//
var lastDate=new Date(timezone);
return Ext.util.Format.date(lastDate, this.format);
}
}
});