Как я могу ограничить две даты в DatePicker ExtJS?
-
26-10-2019 - |
Вопрос
У меня есть DatePicker в ExtJS4. Я хочу разрешить только две даты на каждый месяц. 15 -й и последний день (30/31/28/29 в зависимости от месяца/года)
Как я могу отключить каждый день в сборщике, но разрешать эти две даты?
Решение
Видеть disabledDates
опция конфигурации для Ext.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"].
Другие советы
//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]
});