I have a large dataTable which contains ride information. Every row has a start datetime and an end datetime of the following format(yyyy-mm-dd HH:mm:ss). How can I use a datepicker for setting a filter range in dataTables? I want to have a datepicker which only selects a day and not the time. I've searched everywhere for the proper answer but I couldn't find it. Thanks in advance for helping.
For example I want to see all rows of July by selecting (01-07-2016 - 31-07-2016).
Date Range Filters are used to limit the results on a Dashboard to data that falls in (or outside of) certain date and time groupings. Date Range Filters are available for properties with Date, DateTime, and Time data types.
fn. dataTable. ext.search . This is an array of functions (push your own onto it) which will will be run at table draw time to see if a particular row should be included or not. This example shows a search being performed on the age column in the data, based upon two inputs.
DataTables is a table enhancing library which adds features such as paging, ordering, search, scrolling and many more to a static HTML page. A comprehensive API is also available that can be used to manipulate the table.
The maximum number of rows that a DataTable can store is 16,777,216.
Here is DataTable
with Single DatePicker
as "from" Date Filter
LiveDemo
Here is DataTable
with Two DatePickers
for DateRange (To and From) Filter
LiveDemo
Here is my solution, cobbled together from the range filter example in the datatables docs, and letting moment.js do the dirty work of comparing the 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>
Install Moment: 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
, but you could use mm/dd/yyyy
as well. Be sure to reference moment's docs when parsing other formats, as you may need to modify what method you use.If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With