我有一批格式为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以将我的列识别为“日期”列吗?
答案 0 :(得分:1)
最简单的解决方案是更换此行:
<td><?php echo $date; ?></td>
以下一行:
<td data-order="<?php echo strtotime($date); ?>"><?php echo $date; ?></td>
另一种解决方案是修改date-uk插件以接受mm/dd/YYYY
格式的日期,但上面显示的解决方案会更容易,也可能更快。