Блог Конфуция
Правильная дата 17.12.2008

Создавая дату с помощью new Date(…), мы всегда получим новый объект даты. Если проверить его на истинность, результатом будет true. А как тогда проверить, не ошиблись ли мы, и верна ли дата?

Есть множество способов. Мне понравился этот: !isNaN(+date). Конструкция работает очень просто: приводит дату к числу унарным плюсом и проверяет число на равенство NaN. Для удобства этот код можно завернуть в метод самой даты:


Date.prototype.isValid = function ()
{
    return !isNaN(+this)
}
Есть только одна проблема. Получить невалидную дату в опере (9.2, 9.6) крайне сложно. Для этого необходимо дать на вход просто совершеннейший бред, иначе опера будет усердно угадывать дату даже там, где ее нет. Например, new Date('1 2 3') вернет дату «Mon, 01 Dec 2008 04:57:00 GMT+0300». Как? — не понятно.

Чаще всего в реальной жизни не бывает валидных дат, которые превращаются в 0 (то есть 1 января 1970 в 0 часов и 0 минут: new Date(0)). Поэтому можно обойтись простой проверкой:


alert(+date ? 'валидна' : 'невалидна')
Однако, в сафари NaN почему-то есть истина, и в нем без isNaN не обойтись. Спасибо вам, если вы учитываете особенности сафарьки при разработке сайтов ;)

UPD: Ура! В четвертом сафари NaN стал чушью! Опс, то есть стал ложью ;)

Теги:
  • клиент
  • Date
  • javascript
  • opera
Очень жду ваших комментариев на почту или на гитхаб.