today1 = new Date();
today2 = Date.parse("2008-28-10");
Чтобы сравнить их значения времени (миллисекунды), мне нужно сделать следующее, потому что today2 - это просто число.
if (today1.getTime() == today2)
Почему это?
Моя проблема в том, что я и я уверен, что другие ожидали бы, что метод синтаксического анализа объекта вернет объект того типа, для которого этот метод вызывается.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Если я правильно помню, Date дает вам значение с точностью до миллисекунды, которую вы создали для объекта Date. Поэтому, если этот код не будет запущен точно 28-10 октября в 00: 00: 00: 000, они не будут такими же.
Просто дополнение: Date.parse () по определению возвращает длинное значение, представляющее миллисекундное значение Date, а не сам объект Date. Если вы хотите сохранить сам объект Date, просто создайте его так:
var newDate = new Date();
newDate.setFullYear(2008,9,28);
Для получения дополнительной информации посетите: ссылка на класс Date
Это не отвечает на исходный вопрос, который, перефразируя, звучал так: «Почему тип, возвращаемый из Date.parse, является целым числом, а не Date?». Я тоже не знаю ответа на этот вопрос, но отказываюсь от возможности предложить неправильный ответ в качестве альтернативы.
Как я уже добавил, Date.parse by def возвращает значение миллисекунды, см. Ссылку, с которой я связался ...
Чтобы ответить на вопрос в заголовке: Потому что так решили при создании языка JavaScript. Вероятно, потому что функция синтаксического анализа Java java.util.Date делала то же самое, и они хотели имитировать ее поведение, чтобы язык выглядел более знакомым.
Чтобы ответить на вопрос в тексте ... Используйте эту конструкцию, чтобы получить два объекта даты:
var today2 = new Date(Date.parse("2008-10-28"));
Обновлено: простой
var today2 = new Date("2008-10-28");
тоже работает.
Примечание. Старые версии Internet Explorer (до 9) не понимают тире в строке даты. Однако он работает с косой чертой:
var today2 = new Date("2008/10/28");
Слеши, кажется, универсально понимаются как старыми, так и новыми браузерами.
Середина - месяц, а третья - дата?
@ Дерек: Да. Это единственное обозначение даты, которое имеет какой-либо смысл.
Data.parse возвращает NaN. Что по сути является неопределенным числом. Это то, что возвращает большинство реализаций, когда не может преобразовать строку в дату. Некоторые реализации не справляются ни с чем, кроме строк даты, совместимых с RFC 1123 (это все, что требует спецификация).
Редактировать: в комментарии к этому ответу указано, что Date.parse не возвращает NaN. Однако в спецификации сказано, что синтаксический анализ должен возвращать число. Какой номер он должен вернуть, когда ему дана строка, которую он не может проанализировать как дату? Он не может использовать 0 или -1 или какое-либо другое такое «мошенническое» значение, потому что это допустимые миллисекунды смещения с 1 января 1970 года. Mozilla и IE возвращают NaN, что является вполне разумным поступком.
Хотя спецификация не препятствует синтаксическому анализу строки, такой как «2008-28-10», до действительной даты, она не требует этого. Я не встречал никаких реализаций, которые делали бы что-то большее, чем требуется в спецификации. Следовательно, «10 октября 2008 г.» - это самое близкое к строке выше, которая будет правильно проанализирована.
Date.parse определенно не возвращает NaN.
Попробуй это. Дайте ему "2008-28-10", как в вопросе, и протестируйте с isNaN.
Извините, я кодировал "вопросник" и использовал неправильный формат даты. Однако вы могли бы указать, что мой конкретный Date.parse () возвращал Nan.
Хм ... Я так думал. Однако я предлагаю вам отредактировать свой вопрос, чтобы использовать действительную строку даты. Затем я могу удалить этот ответ, чтобы этот вопрос остался по теме.
Я не могу ответить вместо разработчиков языка, но вы можете использовать результат 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());
И в чем проблема? Почему нужно делать это за один шаг? Есть ли бизнес-потребность?