2013-10-16 3 views
0

У меня есть функция, которая преобразует дату в мой формат и сравнивает ее с CurrentDate. Он работал хорошо, когда я тестирую его с датой - это дата в октябре, по сравнению с сегодняшним днем ​​(16/10/2013) Но если дата - это дата в ноябре, значение возвращает true, что означает дата < currentdate. Я не знаю, почему, кто-нибудь может объяснить это мне? Спасибо.Compare DateTime by Javascript, JQuery

function IsPast(date) { 
     var fullDate = new Date(); 
     var twoDigitMonth = fullDate.getMonth() + 1 + ""; 
     if (twoDigitMonth.length == 1) twoDigitMonth = "0" + twoDigitMonth; 
     var twoDigitDate = fullDate.getDate() + ""; 
     if (twoDigitDate.length == 1) twoDigitDate = "0" + twoDigitDate; 
     var currentDate = twoDigitDate + "/" + twoDigitMonth + "/" + fullDate.getFullYear(); 
     var startDate = $.fullCalendar.formatDate(date, 'dd/MM/yyyy'); 

     if (startDate <= currentDate) {return true;} 
     return false; 
    } 
+0

Могу ли я спросить вас, в каком формате вы вводите 'date' i.e.' IsPast (10/10/2010) '? –

+0

Формат FullCalendar JQuery. Я проверил значение после формирования startDate и currentDate 01/11/2013 и 16/10/2013, но он возвращает true: v –

+0

http://stackoverflow.com/questions/18697888/how-to-compare-date-in- javascript/18697997 # 18697997 –

ответ

2

Если передается объект Date (и это, кажется, что вы получаете), то вы можете просто сделать:

function isPast(date) { 
    return new Date() > date; 
} 

Если дата не является объектом даты, преобразовать его в первую очередь.

Обратите внимание, что идентификаторы, начинающиеся с заглавной буквы, по договоренности зарезервированы для конструкторов.

+0

tks, это сработало хорошо: D –

2

Edit: Когда я впервые прочитал ваш вопрос, я увидел, что вы использовали день первые даты и прыгнул к моему заключению, на самом деле не принимая в своем коде. Я внимательно посмотрел, и, похоже, мой первоначальный вывод - это просто красная селедка. real проблема заключается в том, что вы берете две даты, конвертируя их как в строки, а затем пытающиеся их сравнить. Это просто глупо - это только скажет вам, какая строка идет сначала в алфавитном порядке. Еще глупее, это то, что на одну из дат вы вручную создаете строку, но для другой вы используете функцию форматирования даты. Почему бы вам просто не использовать функцию форматирования даты для обеих дат?

RobG's answer является правильным и его следует принимать.


Когда я вижу дату «01/11/2013», я прочитал его, как 11 января 2013 года, в то время как вы читаете это, как 1 ноября 2013 г. См затруднительное двигатель JavaScript является в том, когда он пытается для анализа этой даты? *

При анализе дат JavaScript мне нравится использовать первые даты года, поскольку они недвусмысленны, насколько я знаю. Каждый из них интерпретирует «2013/11/01» в 2013 году 1 ноября. Включая каждую реализацию JavaScript, которую я видел.

Измените формат даты, чтобы быть однозначным.

* Честно говоря, я удивлен, что вы видите это поведение. Я бы ожидал, что ваша система будет настроена на то, чтобы ожидать даты первого дня и что механизм JavaScript будет использовать эти настройки для правильного анализа даты. Но, я не , что удивлен.