在Ext中,当日期控件是年月格式的时候会发生一种问题,就是选择2月的时候会变成3月.
在电脑时间当前日期在1到28号是正常的.29号到31号就会出现这类问题了.
原因是当你选择日期的时候,格式是Y-m为[2012-02],但是至少内置的时间必须要加上日期号.变成[2012-02-?]这个问号Ext是默认补足.
取的是当前时间的日期号补足它.变成[2012-02-31],这样2月是没有31号的.超过了就月份加一,最后显示为[2012-03].
这个bug不容易发现.目前做以下日期控件重新赋值的方法.只针对[Y-m]做说明.让大家在自己的业务中扩展.
但是我的代码中默认的是选择01号.如果在时间的日期区间的那种,就会出现只能选择01号的情况,不过没关系.只要年月嘛.
Ext.create('Ext.form.Panel', {
renderTo: Ext.getBody(),
width: 300,
bodyPadding: 10,
title: 'Dates',
items: [{
xtype: 'datefield',
anchor: '100%',
fieldLabel: 'From',
format : 'Y-m',
name: 'from_date',
maxValue: new Date() // limited to the current date or prior
}, {
xtype: 'datefield',
anchor: '100%',
fieldLabel: 'To',
name: 'to_date',
format : 'Y-m',
value: new Date() // defaults to today
}]
});
Ext.override(Ext.form.field.Date, {
safeParse : function(value, format) {
var me = this,
utilDate = Ext.Date,
result = null,
strict = me.useStrict,
parsedDate;
if (utilDate.formatContainsHourInfo(format)) {
result = utilDate.parse(value, format, strict);
} else {
if (format == 'Y-m') {
value = value + '-01';
format = 'Y-m-d';
}
parsedDate = utilDate.parse(value + ' ' + me.initTime, format + ' ' + me.initTimeFormat, strict);
if (parsedDate) {
result = utilDate.clearTime(parsedDate);
}
}
return result;
}
});