J'ai un grand dataTable qui contient des informations sur le trajet. Chaque ligne a une heure de début et une heure de fin du format suivant (aaaa-mm-jj HH: mm: ss). Comment utiliser un pointpicker pour définir une plage de filtres dans dataTables? Je veux avoir un sélecteur de date qui sélectionne seulement un jour et non l'heure. J'ai cherché partout la bonne réponse mais je ne l'ai pas trouvée. Merci d'avance pour votre aide.
Par exemple, je veux voir toutes les lignes de juillet en sélectionnant (01-07-2016 - 31-07-2016).
Voici ma solution, regroupée à partir de l'exemple de filtre de plage dans le fichier datatables docs et laisser moment.js effectuer le sale travail de comparaison des dates.
<input
type="text"
id="min-date"
class="date-range-filter"
placeholder="From: yyyy-mm-dd">
<input
type="text"
id="max-date"
class="date-range-filter"
placeholder="To: yyyy-mm-dd">
<table id="my-table">
<thead>
<tr>
<th>ID</th>
<th>Name</th>
<th>Created At</th>
</tr>
</thead>
</table>
Moment d'installation: npm install moment
// Assign moment to global namespace
window.moment = require('moment');
// Set up your table
table = $('#my-table').DataTable({
// ... do your thing here.
});
// Extend dataTables search
$.fn.dataTable.ext.search.Push(
function( settings, data, dataIndex ) {
var min = $('#min-date').val();
var max = $('#max-date').val();
var createdAt = data[2] || 0; // Our date column in the table
if (
( min == "" || max == "" )
||
( moment(createdAt).isSameOrAfter(min) && moment(createdAt).isSameOrBefore(max) )
)
{
return true;
}
return false;
}
);
// Re-draw the table when the a date range filter changes
$('.date-range-filter').change( function() {
table.draw();
} );
yyyy-mm-dd
, mais vous pouvez aussi utiliser mm/dd/yyyy
. Assurez-vous de faire référence à docs du moment lorsque vous analysez d'autres formats , car vous devrez peut-être modifier la méthode que vous utilisez.Après on fonctionne bien avec des moments js 2.10 et plus
$.fn.dataTableExt.afnFiltering.Push(
function( settings, data, dataIndex ) {
var min = $('#min-date').val()
var max = $('#max-date').val()
var createdAt = data[0] || 0; // Our date column in the table
//createdAt=createdAt.split(" ");
var startDate = moment(min, "DD/MM/YYYY");
var endDate = moment(max, "DD/MM/YYYY");
var diffDate = moment(createdAt, "DD/MM/YYYY");
//console.log(startDate);
if (
(min == "" || max == "") ||
(diffDate.isBetween(startDate, endDate))
) { return true; }
return false;
}
);
$.fn.dataTable.ext.search.Push(
function (settings, data, dataIndex) {
var FilterStart = $('#filter_From').val();
var FilterEnd = $('#filter_To').val();
var DataTableStart = data[4].trim();
var DataTableEnd = data[5].trim();
if (FilterStart == '' || FilterEnd == '') {
return true;
}
if (DataTableStart >= FilterStart && DataTableEnd <= FilterEnd)
{
return true;
}
else {
return false;
}
});
--------------------------
$('#filter_From').change(function (e) {
Table.draw();
});
$('#filter_To').change(function (e) {
Table.draw();
});
Suivez le lien ci-dessous et configurez-le selon vos besoins. Daterangepicker le fait pour vous, très facilement. :)
Voici ma solution, il n'y a aucun moyen d'utiliser momemt.js.Here est DataTable avec deux DatePickers pour le filtre DateRange (To et From).
$.fn.dataTable.ext.search.Push(
function (settings, data, dataIndex) {
var min = $('#min').datepicker("getDate");
var max = $('#max').datepicker("getDate");
var startDate = new Date(data[4]);
if (min == null && max == null) { return true; }
if (min == null && startDate <= max) { return true;}
if(max == null && startDate >= min) {return true;}
if (startDate <= max && startDate >= min) { return true; }
return false;
}