比较日期从 - 到

时间:2016-02-17 10:49:59

标签: javascript jquery date

似乎无法了解日期比较的工作原理 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);

我会在选定的结束日添加一天。

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永远不能介于dateStartdateEnd

之间
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) );