2

I'm using jQuery DataTables and I have a problem when I'm sorting my time column with this format mm:ss. For example when I sort this 00:08 the sort does something but this is not good. I have in my column:

00:08
00:15
00:01
01:20
00:16
02:11

So the sort doesn't work. Do you know how can I sort my time column?

Here is my code :

$('#table').DataTable({
    dom: "t<'col-sm-5'i><'col-sm-7'p>",
    autoWidth: false,
    serverSide: true,
    aaSorting: [[0, 'desc']],
    rowId: 'id',
    lengthChange: false,
    ajax: {
        url: 'index',
        method: 'POST'
    }
    columns: [
        {data: "id", width: '5%'},
        {data: "name", width: '10%', orderData: [ 1, 0 ]},
        {data: "user_name", width: '10%', orderData: [ 2, 0 ]},
        {data: "email", width: '35%', orderData: [ 3, 0 ]},
        {data: "duration", render: duration_time, width: '10%', type: "time",orderData: [ 4, 0 ]},
        {data: "incomplete", render: incomplete, width: '30%', orderData: [ 5, 0 ]}
    ]
});

Here is the function for the render parameter :

function duration_time(data, type, dataToSet){
    var start =  dataToSet.date_start;
    var end =  dataToSet.date_end;
    var time = moment.utc(moment(end, "YYYY-MM-DD HH:mm:ss").diff(moment(start, "YYYY-MM-DD HH:mm:ss"))).format("mm:ss");

    return time;
}

function incomplete(data, type, dataToSet){
    return dataToSet.incomplete == 0 ? 'Complete' : 'Incomplete';
}
2
  • Could you show the code that is performing the sort? Commented Jun 2, 2016 at 10:15
  • Would you create a fiddle of your use please Commented Jun 2, 2016 at 10:15

2 Answers 2

5

You have to use Sorting plug-ins.

It allows you to sort the columns based on type and not only on data.

Your code will be like this:

<script type="text/javascript" src="jquery.dataTables.js"></script>
<script type="text/javascript" src="dataTables.numericComma.js"></script>
<script type="text/javascript">
    $(document).ready(function() {
        $('#example').dataTable( {
            "columnDefs": [
                { "type": "time", targets: 3 }
            ]
        } );
    } );
</script>
Sign up to request clarification or add additional context in comments.

4 Comments

Thanks for your answer but there is no changes for me
I'm server side so this will be hard to build my fiddle, I'll update my question to show you my code.
I think that there is a problem because I don't have the duration data server side. I only have the start datetime and the end datetime. The duration is calculate in the render function. That is why the query to the database can't returns me the sort on the duration time. Do you have an idea ?
Did you try to add the plugin and set 5th column to time?
0

I had the same issue today and found the solution. Here is the code.

 <script type="text/javascript" src="//cdn.datatables.net/1.10.19/js/jquery.dataTables.min.js"></script>
 <script type="text/javascript" src="//cdn.datatables.net/plug-ins/1.10.19/sorting/time.js"></script>

    <script type="text/javascript">
        $(document).ready(function() {
            $('#example').dataTable( {
                columnDefs: [
                         { type: 'time-uni', targets: 7 }
                    ]
            } );
        } );
    </script>

You can also check other sorting plugins here: https://cdn.datatables.net/plug-ins/1.10.19/sorting/

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.