Как проверить, что новая Дата («некоторая дата») была в состоянии правильно проанализировать? - PullRequest
2 голосов
/ 27 июля 2010

У меня есть следующий код, который должен пытаться проанализировать данную дату. Если это не удается, по умолчанию используется текущая дата:

var date = new Date(textbox.value); // Try to parse
if (isNaN(date)) date = new Date(); // Default to current

Теперь я использую isNaN (), чтобы проверить, мог ли он правильно проанализировать, например, чтобы проверить, что новая Date () не вернула 'Invalid Date'.

Кажется, это нормально работает в IE, FF и Chrome, но не работает в сафари. Например, если он пытается проанализировать пустую строку для даты, иногда он думает, что это 1970, а иногда он думает, что это недопустимая дата. Вот отрывок из консоли Safari JS:

a=new Date("")  <-- This thinks it's 1970 for some reason
Thu Jan 01 1970 11:00:00 GMT+1100 (AUS Eastern Daylight Time)

b=new Date("abc") <-- Fails of course, which is good
Invalid Date

c=new Date("") <-- Why does this fail now, whereas it thought it was 1970 before?
Invalid Date

isNaN(a)  <-- Why is it successfully parsing an empty string for a date?
false

isNaN(b)  <-- Fair enough
true

isNaN(c)  <-- This is what i'd expect, but why is it different now?
true

Не уверен, что здесь происходит, большое спасибо

1 Ответ

4 голосов
/ 27 июля 2010

Что за сафари? Не бывает для меня:

> a= new Date('')
Invalid Date
> isNaN(a)
true

в Safari 4.0 (любая ОС).

В целом, хотя разбор JavaScript Date традиционно в значительной степени не определен и абсолютно ненадежен. Вы не хотите полагаться на него в качестве значений, вводимых пользователем, поскольку он будет демонстрировать противоречивое и часто неуместное поведение в браузерах, платформах и локалях. Обычно лучше написать свой собственный анализатор (или использовать одну из существующих библиотек дат, например, fleegix's).

...