Я использую плагин Jquery под названием DataTables
Это фантастика, однако я не могу правильно отсортировать даты в соответствии с форматом дд / мм / гггг.
Я посмотрел на их форматы поддержки, но ни одно из этих исправлений не работает.
Может кто-нибудь здесь помочь мне, пожалуйста?
jQuery.extend( jQuery.fn.dataTableExt.oSort, {
"date-uk-pre": function ( a ) {
var ukDatea = a.split('/');
return (ukDatea[2] + ukDatea[1] + ukDatea[0]) * 1;
},
"date-uk-asc": function ( a, b ) {
return ((a < b) ? -1 : ((a > b) ? 1 : 0));
},
"date-uk-desc": function ( a, b ) {
return ((a < b) ? 1 : ((a > b) ? -1 : 0));
}
} );
Добавьте приведенный выше код в скрипт и установите для конкретного столбца значения Date с помощью { "sType": "date-uk" }
и другие, как ноль, см. ниже:
$(document).ready(function() {
$('#example').dataTable( {
"aoColumns": [
null,
null,
null,
null,
{ "sType": "date-uk" },
null
]
});
});
Если вы хотите быстрое решение, вы можете просто добавить фактическое значение DateTime в каждую строку в определенном формате (ГГГГММДД) и сделать его скрытым с помощью CSS, это позволит вам отсортировать этот столбец без каких-либо изменений JavaScript.
HTML
<td><span class='hide'>YYYYMMDD</span>DD/MM/YYYY</td>
CSS
.hide {
display:none;
}
Преобразовать дату в формат YYYYMMDD и добавить к фактическому значению (DD / MM / YYYY) в <td>
оберните это в элемент, установите стиль display:none;
к элементам. Теперь сортировка по дате будет работать как обычная сортировка. То же самое можно применить к сортировке по времени и дате.
HTML
<table id="data-table">
<tr>
<td><span>YYYYMMDD</span>DD/MM/YYYY</td>
</tr>
</table>
CSS
#data-table span {
display:none;
}
Я знаю, что это старый вопрос, и ответы тоже старые. Недавно я наткнулся на простой и понятный способ сортировки дат. Это может быть сделано с помощью HTML5 data-order
приписывать <td>
элемент.
Вот что я сделал в своем PHP:
<?php
$newdate = date('d M Y', $myDateTime); // Format in which I want to display
$dateOrder = date('Y-m-d', $myDateTime); // Sort Order
?>
<td data-order="<?php echo $dateOrder; ?>" >
<?php echo $newdate; ?>
</td>
Пытаться этот плагин.
Как указано Вот вам нужно включить Moment.js и плагин Datatable-момент, затем просто объявите формат даты, которую вы используете.
Плагин будет автоматически определять ваши столбцы даты и сортировать их так, как должно быть.
Для объяснения формата moment.js, проверьте Вот.
Пример:
$(document).ready(function() {
$.fn.dataTable.moment('DD/MM/YYYY HH:mm');
$('#example').DataTable();
});
в php или js просто передайте массив и используйте ортогональность, например:
$var[0][0] = "like as u wish, 30/12/2015 or something else";
$var[0][1] = strtotime($your_date_variable);
и, в данных …
$('#data-table-contas_pagar').dataTable({
"columnDefs": [
{"targets":[0],"data": [0],"render": {"_": [0],"sort": [1]}}
]
});
Другое решение:
https://datatables.net/blog/2014-12-18
с двумя библиотеками javascript:
//cdnjs.cloudflare.com/ajax/libs/moment.js/2.8.4/moment.min.js
а также
//cdn.datatables.net/plug-ins/1.10.15/sorting/datetime-moment.js
тогда только это:
$ (документ) .ready (function () {
$.fn.dataTable.moment( 'DD/MM/YYYY' ); $('#example').DataTable();
});
Если вы не хотите использовать momentum.js или любое другое форматирование даты, вы можете добавить формат даты в миллисекундах в значение даты, чтобы сортировка читалась в соответствии с миллисекундами. И скрыть формат даты в миллисекундах.
Образец кода:
var date = new Date();
var millisecond = Date.parse(date);
HTML
<td>'<span style="display: none;">' + millisecond + "</span>" + date + </td>
Вот и все.
Решение Zaheer Ahmed ‘отлично работает, если вам приходится иметь дело с уже сформированной датой в Великобритании.
У меня была проблема с этим решением, потому что я должен был управлять датой в США.
Я понял это с этим крошечным изменением:
function parseDate(a) {
var ukDatea = a.split('/');
return (ukDatea[2] + ukDatea[1] + ukDatea[0]) * 1;
}
jQuery.extend( jQuery.fn.dataTableExt.oSort, {
"date-uk-pre": function ( a ) {
return parseDate(a);
},
"date-uk-asc": function ( a, b ) {
a = parseDate(a);
b = parseDate(b);
return ((a < b) ? -1 : ((a > b) ? 1 : 0));
},
"date-uk-desc": function ( a, b ) {
a = parseDate(a);
b = parseDate(b);
return ((a < b) ? 1 : ((a > b) ? -1 : 0));
}
});
Затем следует ваше определение «aoColumns».