如何使用JS Data Tables插件正确排序正常的美国日期

时间:2017-06-22 23:43:03

标签: javascript php date datatables

我有一批格式为mm/dd/yyyy的日期以及需要使用数据表排序的相关名称。这些日期是使用PHP循环的循环。我的代码(index.php)如下所示:

<!--
    Assume datatables plugin is loaded, and
    a PHP var named $arr is loaded and has the
    structure:
        $arr['mm/dd/yyyy'] => 'name'
-->
<table class="table cdates">
    <thead>
      <tr>
        <th>Date</th>
        <th>Name</th>
      </tr>
    </thead>
    <tbody>
    <?php 
        foreach($arr as $date => $name){
    ?>
        <tr class="crow">
           <td><?php echo $date; ?></td>
           <td><?php echo $name; ?></td>
        </tr>
    <?php
        }
    ?>
    <tbody>
</table>

在已加载的名为cdatatable.js的javascript文件中,我有以下代码:

$(document).ready(function(){
    $('.cdates').DataTable({
        pageLength:25,
        responsive:true,
        dom: '<"html5buttons"B>lTfgitp',
        buttons: [
            {extend: 'copy'},
            {extend: 'csv'},
            {extend: 'excel', title: 'name'},
            {extend: 'pdf', title: 'name'},

            {extend: 'print',
                customize: function (win){
                    $(win.document.body).css('font-size', '10px');

                    $(win.document.body).find('table')
                            .addClass('compact')
                            .css('font-size', 'inherit');
                }
            }
        ]
    });
});

数据表将对名称进行正确排序,但不幸的是,它将日期视为字符串,因此按位进行排序。例如,如果我有下表:

Date        Name
--------- | -------
01/02/2003  My Name
12/01/2012  Hello world
06/20/2002  Name 2

我按Date排序,目前返回:

Date        Name
--------- | -------
01/02/2003  My Name
06/20/2002  Name 2
12/01/2012  Hello world

它应该返回:

Date        Name
--------- | -------
06/20/2002  Name 2
01/02/2003  My Name
12/01/2012  Hello world

我已经看到了很多关于排序不同国家日期的其他问题,但似乎没有一个真正适用于我。我也尝试将字符串转换为JS中的日期,然后将该值应用于该行。它似乎不起作用,同样的问题发生。

在PHP中是否有一种方法可以将我的日期转换为可以在JavaScript中识别的日期?或者,如果那是不可能的,我可以添加到dataTables以将我的列识别为“日期”列吗?

1 个答案:

答案 0 :(得分:1)

最简单的解决方案是更换此行:

<td><?php echo $date; ?></td>

以下一行:

<td data-order="<?php echo strtotime($date); ?>"><?php echo $date; ?></td>

另一种解决方案是修改date-uk插件以接受mm/dd/YYYY格式的日期,但上面显示的解决方案会更容易,也可能更快。