2016-02-17 5 views
1

Кажется невозможным узнать, как работает сравнение даты.
Php это, Js - это.
Сравнение дат От - До

У меня есть HTML-таблицы с датами:

2016-02-01 08:16:31 
2016-02-01 18:55:52 
2016-02-02 15:13:41 
... 

Теперь я хотел бы построить JS для фильтрации даты из.
Итак, я захватить даты с JQuery в виде текста, и преобразовать его в dateobj:

$('td.datum').each( function() { 
    //Get this date 
    thisDate = new Date($(this).text()); 
... 

Далее я использую bootstrap-datepicker выбрать даты.
Я беру выбранные даты и конвертирую их в дату obj.

dateStart = new Date($('#dateStart').val()); 
dateEnd = new Date($('#dateEnd').val()); 

Теперь я сделал, если заявление сортировать даты:

if (thisDate >= dateStart && thisDate <= dateEnd) { 
    $(this).parent().show(); 
} 
else { 
    $(this).parent().hide(); 
} 

Моя проблема теперь, что если dateStart является 2016-01-01
и dateEnd является 2016-01-02
только 2016-01-01 будет показано.
Мне нужно установить dateEnd на номер 2016-01-03, чтобы показать 2016-01-02.

Почему это?

Я думал, что <= dateEnd в моем заявлении if должно включать выбранный dateEnd?

UPDATE

Мой soloution будет:

//Add one day to dateEnd to get time rigth (00:00:00) 
dateEnd.setDate(dateEnd.getDate() + 1); 

Я добавлю один день в выбранный день завершения.

+0

Зачем нужны новые даты, если вы хотите отсортировать?YYYY-MM-DD сортируется в алфавитном порядке просто отлично – mplungjan

+1

Если вам просто нужно их сравнить, почему бы просто не использовать метод '.getTime()' объектов Date и сравнить результаты целого? –

+0

@Bearburger Как я это сделаю? –

ответ

2

Вы, вероятно, забыв о времени компонента объекта даты ...

Используя следующие даты:

thisDate = '2016-02-02 15:13:41' 
dateStart = '2016-02-01 00:00:00' 
dateEnd = '2016-02-02 00:00:00' 

thisDate никогда не может быть между dateStart и dateEnd

if (thisDate >= dateStart && thisDate <= dateEnd) { 
    $(this).parent().show(); 
} 
else { 
    $(this).parent().hide(); 
} 

, чтобы исправить это, вы можете:

(1) Pad дата окончания, так что это действительно охватывает весь день ...

dateEnd = new Date($('#dateEnd').val() + ' 23:59:59.999'); 

или

(2) отсечь часть времени, когда вы разбора HTML даты

$('td.datum').each( function() { 
    //Get this date 
    thisDate = new Date($(this).text().substring(0, 10)); 
+0

О, да. Это правда. Спасибо. Теперь, как я могу решить это наилучшим образом ?! –

+1

Я только что обновил свой пост с возможными обходными решениями ... –