Подтвердить что ты не робот

Почему Date.parse не возвращает объект Date?

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

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

if (today1.getTime() == today2)

Почему это?

4b9b3361

Ответ 1

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

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

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

EDIT: простая

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

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

Примечание, что Internet Explorer (т.е. JScript) не понимает тире в строке даты. Он работает со слэшами:

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

Ответ 2

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

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

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

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

Ответ 3

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

Обратите внимание, что ваш пример кода неверен: он не является допустимым форматом даты, а не ISO (yyyy-mm-dd) и 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());

Ответ 4

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

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

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