Одной из общих проблем, с которыми сталкиваются начинающие разработчики на 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
.
Добавить комментарий