универсальный метод для анализа даты в разных форматах - PullRequest
1 голос
/ 20 февраля 2012

Мне нужно создать javascript checkDateFormat функцию, которая принимает два строковых аргумента:

  1. Строка даты
  2. Формат строки

Следует проверить, правильно ли отформатирована строка даты на основе строки формата.

Например:

checkDateFormat("12-32-2012", "dd-MM-yyyy") // false

Пользователь может изменить строку формата, и мне нужно соответственно проверить дату.

Я много искал, но не смог найти универсальную функцию, которая достигает того, что мне нужно. Это достижимо или необходимо написать разные реализации для всех возможных форматов даты?

Спасибо.

1 Ответ

2 голосов
/ 20 февраля 2012

Может быть, это то, что вы хотите?

function chkdate(datestr,formatstr){
    if (!(datestr && formatstr)) {return false;}
    var splitter = formatstr.match(/\-|\/|\s/) || ['-']
       ,df       = formatstr.split(splitter[0])
       ,ds       = datestr.split(splitter[0])
       ,ymd      = [0,0,0]
       ,dat;
    for (var i=0;i<df.length;i++){
            if (/yyyy/i.test(df[i])) {ymd[0] = ds[i];}
       else if (/mm/i.test(df[i]))   {ymd[1] = ds[i];}
       else if (/dd/i.test(df[i]))   {ymd[2] = ds[i];}
    }
    dat = new Date(ymd.join('/'));
    return !isNaN(dat) && Number(ymd[1])<=12 && dat.getDate()===Number(ymd[2]);
}
//usage
console.log(chkdate ('12/12/2009', 'dd/mm/yyyy')); //=> true
console.log(chkdate ('12/32/2009', 'dd/mm/yyyy')); //=> false
console.log(chkdate ('2002/02/02', 'yyyy-dd-mm')); //=> false
console.log(chkdate ('02-12-2001', 'dd-mm-yyyy')); //=> true
console.log(chkdate ('02-12-2001', 'dd mm yyyy')); //=> false
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...