Я изо всех сил пытаюсь найти решение для проблемы ниже.
В 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; } },
]
});