当我尝试使用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 :",
lengthMenu: "Afficher _MENU_ éléments",
info: "Affichage de l'élement _START_ à _END_ sur _TOTAL_ éléments",
infoEmpty: "Affichage de l'élement 0 à 0 sur 0 éléments",
infoFiltered: "(filtré de _MAX_ éléments au total)",
infoPostFix: "",
loadingRecords: "Chargement en cours...",
zeroRecords: "Aucun élément à afficher",
emptyTable: "Aucune donnée disponible dans le tableau",
paginate: {
first: "Premier",
previous: "Précé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"
}
}
});
});
有人知道是否有办法使其正常工作吗?
此致
答案 0 :(得分:0)
您的情况可以视为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数据顺序(我们将其设置为时间戳)对列进行排序,而不是对人类可见的最终用户字符串进行排序。
希望有帮助。