Сортировать поле DateTime в DataTable - PullRequest
0 голосов
/ 15 мая 2018

У меня проблемы с сортировкой DateTime поля DataTable, я возвращаю записи из моей таблицы customers через серверную часть.Проблема в том, что когда пришло время щелкнуть метку столбца типа DateTime, данные упорядочиваются так, как если бы это была строка, а не как DateTime.Мне нужно в бразильском формате: ДД / ММ / ГГГГ

enter image description here

index.php

  <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Customers</title>
    </head>

    <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
    <link href="https://cdn.datatables.net/1.10.12/css/dataTables.bootstrap.min.css" rel="stylesheet"/>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
    <script src="https://cdn.datatables.net/1.10.12/js/jquery.dataTables.min.js"></script>
    <script src="https://cdn.datatables.net/1.10.12/js/dataTables.bootstrap.min.js"></script>

    <body>
        <h2>Customers</h2>
        <table id="server-side" class="table table-striped table-bordered table-hover" width="100%" cellspacing="0">
            <thead>
                <tr>            
                    <th>ID</th>
                    <th>REGISTER</th>
                    <th>NAME</th>
                    <th>LEVEL</th>
                    <th>OPTIONS</th>
                    </tr>
            </thead>
        </table>
    <script>
        $(document).ready(function(e){
            $('#server-side').dataTable({
                "bProcessing": true,
                "serverSide": true,         
                "aoColumnDefs": [    
                {
                    "bSearchable": false,
                    "bVisible": false,
            "aTargets": [0]

              },

        {
           "aTargets": [4], 
           "mRender": function ( data, type, full ) { 
            return '<a href="view.php?id=' + full[0] + '"  class="btn btn-sm btn-success"><i class="fa fa-eye"></i> VIEW</a> '+
            '<a href="edit.php?id=' + full[0] + '"  class="btn btn-sm btn-success"><i class="fa fa-pencil"></i> EDIT</a> '+
            '<a href="#" class="btn btn-sm btn-success" data-toggle="modal" data-target="#delete-modal" data-customer="' + full[0] + '"><i class="fa fa-trash"></i> DELETE</a>';
           }
       }
       ],

       language: {
        processing: "processing...",
       },
       "ajax":{
        url :"server-side.php",
        type: "POST",
        error: function(){
            $("#post_list_processing").css("display","none");
        }
       },
         "order": [ 1, "desc"],
    });
        });
    </script>
    </body>
    </html>

server-side.php

<?php
$host = 'db_host';
$db   = 'db_name';
$user = 'db_user';
$pass = 'db_password';

$con = mysqli_connect($host, $user, $pass) or trigger_error(mysql_error(),E_USER_ERROR); 
$con->set_charset("utf8");
mysqli_select_db($con,$db);

$params = $columns = $totalRecords = $data = array();
$params = $_REQUEST;

$columns = array(
    0 => 'id',
    1 => 'register',
    2 => 'name', 
    3 => 'level'
    );

$where_condition = $sqlTot = $sqlRec = "";

if( !empty($params['search']['value']) ) {
    $where_condition .= " WHERE ";
    $where_condition .= " ( name LIKE '%".$params['search']['value']."%' ";    
        $where_condition .= " OR register LIKE '%".$params['search']['value']."%' )";
}

$sql_query = "SELECT id,date_format(register, '%d/%m/%Y') as register,name,level FROM customers";
$sqlTot .= $sql_query;
$sqlRec .= $sql_query;

if(isset($where_condition) && $where_condition != '') {

    $sqlTot .= $where_condition;
    $sqlRec .= $where_condition;
}

$sqlRec .=  " ORDER BY ". $columns[$params['order'][0]['column']]."   ".$params['order'][0]['dir']."  LIMIT ".$params['start']." ,".$params['length']." ";

$queryTot = mysqli_query($con, $sqlTot) or die("Database Error:". mysqli_error($con));

$totalRecords = mysqli_num_rows($queryTot);

$queryRecords = mysqli_query($con, $sqlRec) or die("Error to Get the Post details.");

while( $row = mysqli_fetch_row($queryRecords) ) { 
    $data[] = $row;
}   

$json_data = array(
    "draw"            => intval( $params['draw'] ),   
    "recordsTotal"    => intval( $totalRecords ),  
    "recordsFiltered" => intval($totalRecords),
    "data"            => $data
    );

echo json_encode($json_data);
?>

1 Ответ

0 голосов
/ 15 мая 2018

Вы можете отформатировать дату в PHP и использовать исходный формат даты для сортировки с MySQL.

// Remove format here,
$sql_query = "SELECT id,register,name,level FROM customers";

Затем отформатируйте дату в цикле while:

while( $row = mysqli_fetch_row($queryRecords) ) { 
    $row['register'] = date('d/m/Y', strtotime($row['register']));
    $data[] = $row;
}  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...