Javascript日期过滤准确性问题

时间:2012-11-12 16:11:42

标签: javascript jquery date filter datatable

我正在将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>

查看代码。我注意到没有概念表中的日期是欧盟格式,所以我倾向于这是问题,但我不知道如何处理它。

1 个答案:

答案 0 :(得分:0)

您从数据库获取的数据和您应用的过滤器是否可能属于不同的时区?应该注意的是,JavaScript中的通用Date构造函数假设数据位于Web客户端(您的计算机)的时区中。