我正在将SQL查询中的数据输出到表中,并尝试根据存储在数据表中的两个单独列中的日期对其进行过滤。当我在过滤器中输入日期时,它会过滤它,但不准确。我以EU格式存储日期,表上的数据确实有时间,但过滤器没有。我不确定这是欧盟格式的问题还是时间问题。
我正在使用以下代码取得轻微成功。
var minBeginDateFilter;
var maxBeginDateFilter;
var minEndDateFilter;
var maxEndDateFilter;
$.fn.dataTableExt.afnFiltering.push(
function( oSettings, aData, iDataIndex ) {
var startTime = new Date(aData[3]).getTime();
var endTime = new Date(aData[4]).getTime();
if ( minBeginDateFilter && !isNaN(minBeginDateFilter) ) {
if ( startTime < minBeginDateFilter ) {
return false;
}
}
if ( maxBeginDateFilter && !isNaN(maxBeginDateFilter) ) {
if ( startTime > maxBeginDateFilter ) {
return false;
}
}
if ( minEndDateFilter && !isNaN(minEndDateFilter) ) {
if ( endTime < minEndDateFilter ) {
return false;
}
}
if ( maxEndDateFilter && !isNaN(maxEndDateFilter) ) {
if ( endTime > maxEndDateFilter ) {
return false;
}
}
return true;
}
);
$(document).ready(function(){
//initTable("#itemTable");
$("tr:odd").css("background-color", "#DBD4CE");
$("tr:even").css("background-color", "#F9F1EA");
$("#dialog").dialog({ autoOpen: false });
$("#dialog_link").click(function() {
$("#dialog").dialog("open");
});
var oTable = $('#itemTable').dataTable( {
"bJQueryUI": true
} );
$.datepicker.dateFormat = 'dd/mm/yy';
$( "#beginFrom" ).datepicker( {
"onSelect": function(date) {
minBeginDateFilter = new Date(date).getTime();
oTable.fnDraw();
},
dateFormat: 'dd/mm/yy'
} ).keyup( function () {
minBeginDateFilter = new Date(this.value).getTime();
oTable.fnDraw();
} );
$( "#beginTo" ).datepicker( {
"onSelect": function(date) {
maxBeginDateFilter = new Date(date).getTime();
oTable.fnDraw();
},
dateFormat: 'dd/mm/yy'
} ).keyup( function () {
maxBeginDateFilter = new Date(this.value).getTime();
oTable.fnDraw();
} );
$( "#endFrom" ).datepicker( {
"onSelect": function(date) {
minEndDateFilter = new Date(date).getTime();
oTable.fnDraw();
},
dateFormat: 'dd/mm/yy'
} ).keyup( function () {
minEndDateFilter = new Date(this.value).getTime();
oTable.fnDraw();
} );
$( "#endTo" ).datepicker( {
"onSelect": function(date) {
maxEndDateFilter = new Date(date).getTime();
oTable.fnDraw();
},
dateFormat: 'dd/mm/yy'
} ).keyup( function () {
maxEndDateFilter = new Date(this.value).getTime();
oTable.fnDraw();
} );
});
表格代码:
<table id="itemTable" border="0" cellpadding="0" cellspacing="0" width="100%">
<thead>
<tr>
<th>Start Date & Time ${timeZone}</th>
<th>End Date & Time ${timeZone}</th>
</tr>
</thead>
<tbody>
<c:forEach items="${marketAlerts}" var="marketAlert">
<tr id="item_${marketAlert.messageId}">
<td><fmt:formatDate pattern="${datePattern}" value="${marketAlert.eventStart}" /></td>
<td><fmt:formatDate pattern="${datePattern}" value="${marketAlert.eventStop}" /></td>
</tr>
</c:forEach>
</tbody>
</table>
查看代码。我注意到没有概念表中的日期是欧盟格式,所以我倾向于这是问题,但我不知道如何处理它。
答案 0 :(得分:0)
您从数据库获取的数据和您应用的过滤器是否可能属于不同的时区?应该注意的是,JavaScript中的通用Date构造函数假设数据位于Web客户端(您的计算机)的时区中。