Фильтр данных Datatables Datetime и сортировка по значению DatePicker - PullRequest
0 голосов
/ 02 ноября 2018

Я изо всех сил пытаюсь найти решение для проблемы ниже. В datatable я извлекаю поля даты и времени (вход, выход) из SQL Server через вызов ajax (query.php).

В SQL-заявлении я использую это:

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

чтобы его было проще использовать для вывода в формате JSON.

Я использую следующий код в Datatable для отображения и фильтрации полей даты и времени в формате евро (дд / мм / гггг чч: ii: сс), и он отлично работает.

   {"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) для фильтрации данных, он не работает должным образом, он не фильтрует и не сортирует правильно. Если я удаляю код 'render' , он фильтрует и сортирует правильно, но у меня нет формата евро (дд / мм / ГГГГ чч: ii: сс).

Я очень запутался со всеми этими различными типами строк даты-времени из разных источников (Datepicker, Datatable, Database), которые я должен использовать-конвертировать.

Формат, который я хочу использовать для выбора даты, и формат данных - это формат евро (дд / мм / ГГГГ чч: ii: сс).

Каковы лучшие практики в таких случаях при работе с Datetime?

1) Должен ли я форматировать (или конвертировать) дату и время в SQL-запросе?

2) Лучше ли передавать объект datetime, а не строку в выводе JSON для заполнения Datatable?

3) Можно ли визуализировать столбец Datatable для отображения желаемого формата даты и времени?

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; }  },

       ]

});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...