0

現在、SQL クエリからテーブルにデータを出力し、データテーブルに格納されている 2 つの別々の列の日付に基づいてフィルター処理しようとしています。フィルターに日付を入力すると、フィルター処理されますが、正確ではありません。日付を EU 形式で保存していますが、テーブルのデータには時刻がありますが、フィルターにはありません。これが 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>

コードを見ています。表の日付がEU形式であるという概念がないことに注意しているので、それが問題に傾いていますが、それを処理する方法がわかりません.

4

1 に答える 1

0

データベースから取得しているデータと適用しているフィルターのタイムゾーンが異なる可能性はありますか? JavaScript の一般的な Date コンストラクターは、データが Web クライアント (コンピューター) のタイム ゾーンにあると想定していることに注意してください。

于 2012-11-12T16:20:59.960 に答える