如何使用datatable插件按日期顺序排序(从最旧到最新)

时间:2019-05-07 13:05:34

标签: jquery html-table datatable datatables

当我尝试使用DataTable插件对表的日期列进行“排序”时,我遇到了问题。

我已经设置了日期格式,使其看起来像这样:星期几(全字母),月份(数字),月份(数字)和年份(数字)全部用法语表示。

在我的代码中,我将其设置如下:

setlocale(LC_ALL, 'fr_FR');

...
...
<table class="table table-hover table-responsive display" id="table_1" >
                    <thead>
                        <tr>
                            <th scope="col">ID</th>
                            <th scope="col">Titre</th>
                            <th scope="col">Prénom</th>
                            <th scope="col">Prospect créé le </th>
                        </tr>
                    </thead>
                    <tbody>
                    <?php
            foreach($result as $key1){
                ?>
                        <tr>
                            <td scope="row"><?php echo $key1['ID']; ?></th>
                            <td><?php  echo  $key1['TITLE']; ?></td>
                            <td><?php echo  $key1['NAME']; ?></td>
                            <td><?php $date_create=$key1['DATE_CREATE']; echo strftime("%A %e %B %Y à %H h %M ", strtotime($date_create)); ?>
                            </td>
                        </tr>
                    <?php
            }
            ?>
                    </tbody>
                </table>

因此在我的表格中看起来像这样: https://i.ibb.co/KjH4ctk/Capture.png

但是当我尝试使用datatable插件按日期排序时,它按星期几而不是按日期排序。

这是我的js文件:

$(document).ready(function () {
$('#table_1').DataTable({
        "destroy": true,
        language: {
            processing: "Traitement en cours...",
            search: "Rechercher&nbsp;:",
            lengthMenu: "Afficher _MENU_ &eacute;l&eacute;ments",
            info: "Affichage de l'&eacute;lement _START_ &agrave; _END_ sur _TOTAL_ &eacute;l&eacute;ments",
            infoEmpty: "Affichage de l'&eacute;lement 0 &agrave; 0 sur 0 &eacute;l&eacute;ments",
            infoFiltered: "(filtr&eacute; de _MAX_ &eacute;l&eacute;ments au total)",
            infoPostFix: "",
            loadingRecords: "Chargement en cours...",
            zeroRecords: "Aucun &eacute;l&eacute;ment &agrave; afficher",
            emptyTable: "Aucune donnée disponible dans le tableau",
            paginate: {
                first: "Premier",
                previous: "Pr&eacute;c&eacute;dent",
                next: "Suivant",
                last: "Dernier"
            },
            aria: {
                sortAscending: ": activer pour trier la colonne par ordre croissant",
                sortDescending: ": activer pour trier la colonne par ordre décroissant"
            }
        }
    });


});

有人知道是否有办法使其正常工作吗?

此致

1 个答案:

答案 0 :(得分:0)

您的情况可以视为orthogonal-data

Datatables Orthogonal Data

  

数据很复杂。表格中显示的数据不仅具有   有关每个数据点如何与中的其他数据点相对应的规则   您的表格,而且每个数据点本身可以​​采用多种形式。   例如考虑货币数据;为了显示它可能会显示   排序时以货币符号和千位分隔符格式化   应该以数字形式发生,并且对数据进行搜索将接受   表格。

从文档中可以找到几种解决问题的方法,但是如果您的表已经存在或以HTML生成,那么最好使用HTML5数据方法。

Datatables HTML5 Data Atrributes

  

DataTables支持data- *属性,该属性可用于保存   信息在DOM中可见,但对最终用户不可见。

现在回到您当前的代码,让我们找出我们需要更改的部分。

仅PHP部分,让我们对此进行更改:

<?php
    foreach($result as $key1){
?>
        <tr>
            <td scope="row"><?php echo $key1['ID']; ?></th>
            <td><?php  echo  $key1['TITLE']; ?></td>
            <td><?php echo  $key1['NAME']; ?></td>
            <td><?php $date_create=$key1['DATE_CREATE']; echo strftime("%A %e %B %Y à %H h %M ", strtotime($date_create)); ?>
            </td>
        </tr>
<?php
    }
?>

对此:

<?php
    foreach($result as $key1){
        $date_create=$key1['DATE_CREATE'];
        $timestamp = strtotime($date_create);
        $local_datetime = strftime("%A %e %B %Y à %H h %M ", $timestamp);
?>
    <tr>
        <td scope="row"><?php echo $key1['ID']; ?></td>
        <td><?php echo $key1['TITLE']; ?></td>
        <td><?php echo $key1['NAME']; ?></td>
        <td data-order="<?php echo $timestamp; ?>"><?php echo $local_datetime; ?></td>
    </tr>
<?php
    }
?>

该实现将使Datatable根据HTML数据顺序(我们将其设置为时间戳)对列进行排序,而不是对人类可见的最终用户字符串进行排序。

希望有帮助。