Вебинары Разобраться в IT Реферальная программа
Программирование Аналитика Дизайн Маркетинг Управление проектами
10 Фев 2024
2 мин
678

Определение недопустимых дат в JavaScript

Одной из общих проблем, с которыми сталкиваются начинающие разработчики на JavaScript, является определение недопустимых дат. Например, когда создается

Одной из общих проблем, с которыми сталкиваются начинающие разработчики на JavaScript, является определение недопустимых дат. Например, когда создается новый экземпляр даты с использованием строки, которая не может быть преобразована в дату, результатом будет объект даты, который не является действительным.

var d = new Date("не дата");
console.log(d.toString()); // выводит 'Invalid Date'
console.log(typeof d); // выводит 'object'
console.log(d instanceof Date); // выводит 'true'

Как видно из примера, даже если дата недействительна, она все равно является объектом и экземпляром даты. Это может привести к некорректной работе кода, если не проверять дату на действительность.

Один из способов определения, является ли дата действительной, — использовать метод Date.parse, который позволяет разобрать строку даты и вернуть время в миллисекундах или NaN, если строка не может быть преобразована в дату. Однако этот метод работает только со строками, а не с экземплярами даты.

function isValidDate(d) {
  return !isNaN(Date.parse(d));
}

console.log(isValidDate("2021-12-31")); // выводит 'true'
console.log(isValidDate("не дата")); // выводит 'false'

Если необходимо работать с экземплярами даты, можно проверить значение времени даты, которое также будет NaN для недопустимых дат. Это поведение описано в стандарте ECMA-262.

function isValidDate(d) {
  if (!(d instanceof Date)) {
    return false;
  }
  return !isNaN(d.getTime());
}

console.log(isValidDate(new Date("2021-12-31"))); // выводит 'true'
console.log(isValidDate(new Date("не дата"))); // выводит 'false'

Таким образом, можно определить, является ли дата действительной, проверив, является ли она экземпляром даты и не равно ли ее значение времени NaN.

Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей

Добавить комментарий