2016-02-04 2 views
0

Похоже, что сравнение дат работает с временными переменными, но не выполняется, когда одна или обе даты сначала назначаются локальной переменной. Мне это кажется очень странным, что я могу потерять?Дата Javascript работает с временными параметрами, но сбой при первом присвоении переменной

var before = Date(2012,11,9) 
console.log(new Date(2012,11,10) > before) // -> false 
console.log(new Date(2012,11,10) > new Date(2012, 11, 9)) // -> true 

Я воспроизвели из редактора Atom, а также на синтаксический анализ, который также находится на Node.js.

Atom Runner: hacks.js 

false 
true 
Exited with code=0 in 0.084 seconds 

Любые идеи?

+0

[MDN - Date] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Date): 'Объекты JavaScript Date могут быть созданы только путем вызова JavaScript Date в качестве конструктора: вызов его как регулярной функции (т.е. без нового оператора) вернет строку, а не объект Date; в отличие от других типов объектов JavaScript, объекты JavaScript Date не имеют буквенного синтаксиса. ' –

+0

К сожалению, неловко. –

ответ

0

X> X всегда является ложным. 2012-11-10 более поздний, чем 2012-11-09. Это ГГГГ, ММ, DD!

+0

Вы пропустили проблему, а сравниваемые значения - миллисекунды с 1970-01-01, поэтому 2012-11-10 имеет большее значение времени, чем 2012-11-09. – RobG

+0

@RobG, нет, я не пропустил это, я просто не понял. Я знаю, что он сравнивает временные метки. Однако я пропустил отсутствующий «новый». Я думал, что его можно было обмануть разными культурными традициями, потому что я видел много раз, когда люди путаются по датам вроде 10/11: это 11 октября или 10 ноября. – Gavriel

2

При присвоении даты before вам не хватает ключевого слова "новое".

Попробуйте снова с помощью:

var before = new Date(2012,11,9); 
1

Это работает, я поставил новый перед объявлением для перед:

var before = new Date(2012,11,9); 
console.log(new Date(2012,11,10) > before); 
console.log(new Date(2012,11,10) > new Date(2012, 11, 9)); 
2

Это создает строку,

Date(2012,11,9) 

Этот производит объект Дата

new Date(2012,11,9) 
2

Вам не хватает ключевого слова new. Вызов Date конструктора без newreturns a string:

Даты объекты JavaScript может быть создана только с помощью вызова JavaScript Даты в качестве конструктора: вызов его в качестве регулярной функции (т.е. без нового оператора) возвращает строку, а не дата объект; в отличие от других типов объектов JavaScript, объекты JavaScript Date не имеют литерального синтаксиса.

Сравнить:

var before = Date(2012,11,9) 
console.log(typeof before) // 'string' 

против:

var before = new Date(2012,11,9) 
console.log(typeof before) // 'object' 
Смежные вопросы