Почему Date.parse не возвращает объект Date? - PullRequest
14 голосов
/ 28 октября 2008
today1 = new Date();
today2 = Date.parse("2008-28-10");

Чтобы сравнить значения времени (миллисекунды) с этими значениями, я должен сделать следующее, потому что сегодня2 - это просто число.

if (today1.getTime() == today2)

Почему это?

Ответы [ 4 ]

31 голосов
/ 28 октября 2008

Чтобы ответить на вопрос в заголовке: Потому что они так решили при создании языка JavaScript. Возможно, потому что функция разбора Java java.util.Date делала то же самое, и они хотели подражать ее поведению, чтобы язык казался более знакомым.

Чтобы ответить на вопрос в тексте ... Используйте эту конструкцию, чтобы получить два объекта даты:

var today2 = new Date(Date.parse("2008-10-28"));

РЕДАКТИРОВАТЬ: простой

var today2 = new Date("2008-10-28");

тоже работает.

Обратите внимание , что Internet Explorer (т.е. JScript) не понимает тире в строке даты. Работает с косой чертой, хотя:

var today2 = new Date("2008/10/28");
4 голосов
/ 28 октября 2008

Если я правильно помню, Date возвращает значение с точностью до миллисекунды, в которой вы создали объект Date. Поэтому, если этот код не будет запущен точно в 2008-28-10 в 00: 00: 00: 000, они не будут одинаковыми.

Просто дополнение: Date.parse () по определению возвращает длинное значение, представляющее значение в миллисекундах Date, а не сам объект Date. Если вы хотите сохранить сам объект Date, просто создайте его так:

var newDate = new Date();
newDate.setFullYear(2008,9,28);

Для получения дополнительной справки проверьте: Ссылка на класс даты

2 голосов
/ 28 октября 2008

Я не могу ответить вместо разработчиков языка, но вы можете использовать результат Date.parse или Date.UTC в конструкторе Date, чтобы получить такой объект.

Обратите внимание, что пример кода неверен: это недопустимый формат даты, а не ISO (гггг-мм-дд) и IETF (понедельник, 25 декабря 1995 г. 13:30:00 GMT + 0430). Таким образом, вы получите NaN. Date.parse понимает только формат IETF, из того, что я прочитал на MDC .

Если вам нужно сравнить две даты, вы можете сравнить результаты .getFullYear (), .getMonth () и .getDay () или просто сравнить строковые представления на требуемом уровне.

var d1 = new Date();
var n = Date.parse("28 Oct 2008");
var d2 = new Date(n);
var d3 = new Date("28 october 2008");

alert(d1.toDateString() == d2.toDateString());
alert(d2.toDateString() == d3.toDateString());
1 голос
/ 28 октября 2008

Data.parse возвращает NaN. Который по сути является неопределенным числом. Это то, что возвращает большинство реализаций, когда невозможно преобразовать строку в дату. Некоторые реализации не справляются ни с чем, кроме RFC 1123 совместимых строк дат (это все, что требует спецификация).

Редактировать : комментарий к этому ответу гласит, что Date.parse не возвращает NaN. Однако в спецификации сказано, что parse должен возвращать число. Какой номер он должен вернуть, если ему дана строка, которую он не может проанализировать как дату? Он не может использовать 0 или -1 или какое-либо другое такое «мошенническое» значение, потому что это допустимые смещения в миллисекундах с 1 января 1970 года. Mozilla и IE оба возвращают NaN, что совершенно разумно.

Хотя спецификация не исключает синтаксический анализ строки, такой как «2008-28-10», до действительной даты, она не требует этого. Я не встречал никаких реализаций, которые делают что-то большее, чем требуется в спецификации. Следовательно, «10 октября 2008 года» - самое близкое, что вы попадете к строке выше, которая будет правильно проанализирована.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...