Как я могу ограничить две даты в ExtJS DatePicker? - PullRequest
2 голосов
/ 17 февраля 2012

У меня есть DatePicker в ExtJS4. Я только хочу разрешить ДВЕ даты для каждого месяца. 15-й и последний день (30/31/28/29 в зависимости от месяца / года)

Как я могу отключить каждый день в сборщике, но разрешить эти две даты?

Ответы [ 2 ]

2 голосов
/ 20 февраля 2012
//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]
});
2 голосов
/ 17 февраля 2012

См. 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"].

...