数据表Datetime字段根据datepicker值进行过滤和排序

时间:2018-11-02 17:14:11

标签: jquery sql-server jquery-ui datatables

我正在努力寻找以下问题的解决方案。 在数据表中,我通过ajax调用(query.php)从SQL Server获取日期时间字段(入口,出口)。

在sql语句中,我使用以下代码:

  FORMAT ( sqltable1.entrance_date, 'dd/MM/yyyy HH:mm:ss','en-us' ) as entrance  

以便更轻松地用于我的JSON输出。

我在Datatable中使用以下代码来将日期时间字段显示和过滤为欧元格式(dd / mm / YYYY hh:ii:ss),并且效果很好。

   {"data": "entrance"  , 
               render: function ( data, type, row ) {

               var deDatea = jQuery.trim(data).split(' ');
               var hourSplit = deDatea[1].split(':');
               var dateSplit = deDatea[0].split('/');

         return type === "display" || type === "filter" ?
         dateSplit[2] +'/'+ dateSplit[1] +'/'+ dateSplit[0] +' '+ hourSplit[0]+':'+ hourSplit[1]+':'+ hourSplit[2]: data; }  } ,

但是当我使用2个带有'el'语言的日期选择器(#apo,#ews)来过滤tha数据表时,它不能正常工作,它不能正确地过滤两个排序。如果我删除了'render'代码,它可以正确过滤和排序,但我没有欧元格式(dd / mm / YYYY hh:ii:ss)。

我对我必须使用转换的来自不同来源(Datepicker,Datatable,Database)的所有这些不同的datetime-string类型感到非常困惑。

我希望在日期选择器和数据表中使用的Tha格式是欧元格式(dd / mm / YYYY hh:ii:ss)。

在这种情况下,哪种最佳实践与Datetime一起使用?

1)我应该在SQL查询中格式化(或转换)日期时间吗?

2)是否最好在JSON输出中传递日期时间对象而不是字符串来填充数据表?

3)可以渲染“数据表”列以显示所需的日期时间格式吗?

4)moment.js是否可以解决所有这些问题?

我的完整代码在这里:

 $(function () {

//Date picker
$('#apo').datepicker({
  language: 'el', 
  autoclose: true
 })

$('#ews').datepicker({
 language: 'el', 
 autoclose: true
 })

  $.fn.dataTable.ext.search.push(
    function (settings, data, dataIndex) {
        var min = $('#apo').datepicker("getDate");
        var max = $('#ews').datepicker("getDate");
        var startDate = new Date(data[4]);
        if (min == null && max == null) { return true; }
        if (min == null && startDate <= max) { return true;}
        if(max == null && startDate >= min) {return true;}
        if (startDate <= max && startDate >= min) { return true; }
        return false;
    }
    ); 

        $("#apo").datepicker({ onSelect: function () { table.draw(); }});
        $("#ews").datepicker({ onSelect: function () { table.draw(); }});

        $('#apo, #ews').change(function () {
            table.draw();
        }); 

        var table = $('#example').DataTable({

  "ajax" : { url: "query.php",
           dataType: "json",
           dataSrc: '' },
 "order": [[ 4, "desc" ]],     
 "columns": [
     { "data": "card" },
     { "data": "lastname" },
     { "data": "firstname" },
     {"data": "entrance"  , 
               render: function ( data, type, row ) {

               var deDatea = jQuery.trim(data).split(' ');
               var hourSplit = deDatea[1].split(':');
               var dateSplit = deDatea[0].split('/');

         return type === "display" || type === "filter" ?
         dateSplit[2] +'/'+ dateSplit[1] +'/'+ dateSplit[0] +' '+ hourSplit[0]+':'+ hourSplit[1]+':'+ hourSplit[2]: data; }  } ,

     { "data": "exit" , 
          render: function ( data1, type, row ) {

         var deDatea1 = jQuery.trim(data1).split(' ');
         var hourSplit1 = deDatea1[1].split(':');
         var dateSplit1 = deDatea1[0].split('/');

         return type === "display" || type === "filter" ?
         dateSplit1[2] +'/'+ dateSplit1[1] +'/'+ dateSplit1[0] +' '+ hourSplit1[0]+':'+ hourSplit1[1]+':'+ hourSplit1[2]: data1; }  },

       ]

});

0 个答案:

没有答案