我正在努力寻找以下问题的解决方案。 在数据表中,我通过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; } },
]
});