Эффективная проверка дат

Инструментарий JavaScript для работы с датами очень прост и не достаточен для форматирования дат. Хотя существует множество библиотек которые существенно облегчают обработку дат, часто нужно просто проверять дату в строке. Для такого случая отлично подходит следующий скрипт. Он позволяет проверить дату с любым разделителем и годом, указанным 4-мя цифрами.
function isValidDate(value, userFormat) {
  
  // Используем формат по умолчанию, если ничего не указано
  userFormat = userFormat || 'mm/dd/yyyy';
  
  // Находим разделитель исключая символы месяца, дня и года (в английском варианте - m, d, y)
  var delimiter = /[^mdy]/.exec(userFormat)[0];
  
  // Создаем массив из месяца, дня и года,
  // то есть мы знаем порядок формата
  var theFormat = userFormat.split(delimiter);
  
  // Создаем массив из даты пользователя
  var theDate = value.split(delimiter);
  
  function isDate(date, format) {
    var m, d, y, i = 0, len = format.length, f;
    for (i; i < len; i++) {
      f = format[i];
      if (/m/.test(f)) m = date[i];
      if (/d/.test(f)) d = date[i];
      if (/y/.test(f)) y = date[i];
    }
    return (
      m > 0 && m < 13 &&
      y && y.length === 4 &&
      d > 0 &&
      // Проверяем правильность дня месяца
      d <= (new Date(y, m, 0)).getDate()
    );
  }
  
  return isDate(theDate, theFormat);
}

Использование:
Следующая строка вернет false, так как в ноябре 30 дней:
isValidDate('dd-mm-yyyy', '31/11/2012')

Теги:
Валидация, дата
Добавлено: 18 Апреля 2018 10:13:54 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...