似乎无法了解日期比较的工作原理
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语句来排序日期:
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
。
为什么?
我认为if语句中的<= dateEnd
应该涉及选择dateEnd
?
更新
我的解决方案是:
//Add one day to dateEnd to get time rigth (00:00:00)
dateEnd.setDate(dateEnd.getDate() + 1);
我会在选定的结束日添加一天。
答案 0 :(得分: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)填写结束日期,以便真正涵盖整天......
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) );