【发布时间】:2012-03-08 07:02:30
【问题描述】:
我在 ExtJS4 中有一个 DatePicker。我只想允许每个月有两个日期。第 15 天和最后一天(30/31/28/29 取决于月/年)
如何在选择器中禁用每一天但允许这两个日期?
【问题讨论】:
标签: regex extjs datepicker extjs4
我在 ExtJS4 中有一个 DatePicker。我只想允许每个月有两个日期。第 15 天和最后一天(30/31/28/29 取决于月/年)
如何在选择器中禁用每一天但允许这两个日期?
【问题讨论】:
标签: regex extjs datepicker extjs4
请参阅disabledDatesExt.form.field.Date 的配置选项
来自 API 文档:
disabledDates : String[] 要禁用的“日期”数组,作为字符串。 这些字符串将用于构建动态正则表达式,因此 他们非常强大。一些例子:
// disable these exact dates: disabledDates: ["03/08/2003", "09/16/2003"] // disable these days for every year: disabledDates: ["03/08", "09/16"] // only match the beginning (useful if you are using short years): disabledDates: ["^03/08"] // disable every day in March 2006: disabledDates: ["03/../2006"] // disable every day in every March: disabledDates: ["^03"]请注意,包含在数组中的日期格式应该完全 匹配格式配置。为了支持正则表达式,如果 您正在使用具有“。”的日期格式。在其中,您将不得不 限制日期时转义点。例如:["03\.08\.03"]。
【讨论】:
last day of month 的正则表达式。有什么想法吗?
allowedDates 选项。禁用第 1-14 天和第 16-27 天很容易,如果笨拙的话,只需列出它们即可。问题在于月份的最后一天。
//Get the last date of the month. If in Feb 2012, lastDate is 29.
var lastDate = Ext.Date.getDaysInMonth(new Date());
//15th
var middleDate = 15;
//Construct regular expression
var disabledArray=[];
var today = Ext.Date.format(new Date(), 'm/d/Y');
var dateReg = /(\d{2}\/)\d{2}(\/\d{4})/;
disabledArray.push(today.replace(dateReg, '$1' + middleDate + '$2'));
disabledArray.push(today.replace(dateReg, '$1' + lastDate + '$2'));
//Something like "^(?!02/15/2012|02/29/2012).*$" including the two days allowed.
var disabledReg = '^(?!' + disabledArray.join('|') + ').*$';
//Apply the regular expression to date field
var dateField = new Ext.form.field.Date({
format: 'm/d/Y',
disabledDates: [disabledReg]
});
【讨论】: