2012-11-12 40 views
0

我正在將數據從SQL查詢輸出到表中,並試圖根據存儲在數據表中的兩個單獨列中的日期進行過濾。當我在過濾器中輸入日期時,它將過濾它,但不準確。我以EU格式存儲日期,表格中的數據確實有時間,但過濾器沒有。我不確定這是歐盟格式的問題還是時間上的問題。Javascript日期過濾準確性問題

我正在使用下面的代碼來取得小成功。

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

aData的值是什麼?它來自哪裏? – Matt

+0

aData是可數據表itemTable。我在此頁面提供的示例中實現了此功能http://live.datatables.net/etewoq/4/edit#javascript,live – Patrick

回答

0

是否有可能從數據庫中獲得的數據和您應用的過濾器的時區不同?應該注意的是,JavaScript中的通用Date構造函數假定數據位於Web客戶端(您的計算機)的時區中。

+0

時區對於幾個小時的變化而言是否重要?我得到的結果不準確的幾個月,而不僅僅是幾天。 – Patrick