简体   繁体   English

jQuery DataTables插件:排序德国日期

[英]jQuery DataTables plugin: Sort German date

I use jQuery DataTables plugin and my problem is that my German date does not get ordered correctly. 我使用jQuery DataTables插件,我的问题是我的德语日期没有正确排序。 It has the following format: dd.mm.YYYY HH:iih 它具有以下格式: dd.mm.YYYY HH:iih

Here comes my code: 这是我的代码:

JSFIDDLE: 的jsfiddle:

https://jsfiddle.net/uxaLn1e3/3/ https://jsfiddle.net/uxaLn1e3/3/

HTML: HTML:

    <table id="my-table">
   <thead>
      <th>Nr. </th>
      <th>Date</th>
      <th>Name</th>
   </thead>
   <tr>
      <td>1</td>
      <td>27.08.2015 19:00h</td>
      <td>Carl</td>
   </tr>
   <tr>
      <td>2</td>
      <td>10.02.2016 14:00h</td>
      <td>Alan</td>
   </tr>
   <tr>
      <td>3</td>
      <td>07.12.2015 21:00h</td>
      <td>Bobby</td>
   </tr>
</table>

JS (updated, with ajax): JS(更新,使用ajax):

     $('#my-table').DataTable({
            "ajax": 'my_url',
            "columns": [
                {"data": "nr"},
                {"data": "date"},
                {"data": "name"}
            ],
                "autoWidth": false,
                "order": [],
                "fnCreatedRow": function( nRow, aData, iDataIndex ) {
                   var dateFull = aData.date;
                   var dateFullItems = dateFull.split(' ');
                   var dateDatum = dateFullItems[0];
                   var dateDatumItems = dateDatum.split('.');
                  var dateTime = dateFullItems[1];
                  var dateFormat = dateDatumItems[2] + '-' + dateDatumItems[1] + '-' + dateDatumItems[0] + 'T' + dateTime + ':00Z'; 

                  $(nRow).find('td:nth-of-type(2)').attr('data-sort', dateFormat);
            },
            });

What adjustments do I need to do in my JS for the sorting of date to work? 我需要在JS中进行哪些调整才能对日期进行分类?

Add a data-sort attribute to the td having the date stored in a Standard Format (I have used ISO Format here ie YYYY-MM-DDTHH:ii:ssZ ): 向具有以标准格式存储的日期的td添加data-sort属性(我在这里使用了ISO格式,即YYYY-MM-DDTHH:ii:ssZ ):

<tr>
  <td>1</td>
  <td data-sort="2015-08-27T19:00:00Z">27.08.2015 19:00h</td>
  <td>Carl</td>
</tr>
<tr>
  <td>2</td>
  <td data-sort="2016-02-10T14:00:00Z">10.02.2016 14:00h</td>
  <td>Alan</td>
</tr>
<tr>
  <td>3</td>
  <td data-sort="2015-12-07T21:00:00Z">07.12.2015 21:00h</td>
  <td>Bobby</td>
</tr>

Now datatables will consider this data-sort value instead of the html of td to sort the columns. 现在, datatables会考虑这个data-sort值,而不是HTML的td的列进行排序。

Live Fiddle 活小提琴

Even if you are creating the table dynamically you can achieve this in two ways: 即使您动态创建表,也可以通过两种方式实现此目的:

A. Add a data-sort attribute while generating the html. A.在生成html时添加data-sort属性。

B. Add a data-sort after the datatable is created using jQuery and then reinit the datatable. B.使用jQuery创建data-sort后添加data-sort ,然后重新启动数据表。

I think you must using a datetime format plugin for your gender data script, or a plugin for sortting your formatted datetime ( Ultimate date / time sorting plug-in is my recommend) 我认为您必须为性别数据脚本使用日期时间格式插件,或者使用插件对您的格式化日期时间进行排序 (我建议使用最终日期/时间排序插件

Sample on your case: jsfiddle.net/x92amfe4/4/ 您的案例样本:jsfiddle.net/x92amfe4/4/

You can sort the dates by making JavaScript date objects from the strings. 您可以通过从字符串中创建JavaScript日期对象来对日期进行排序。 You then only need to split up the german date ("dd.mm.yy") and make a new date: 然后,您只需要拆分德国日期(“dd.mm.yy”)并创建一个新日期:

      new Date(date.split('.')[2], date.split('.')[1]-1, date.split('.')[0])

For sorting german dates: 对于德国日期的排序:

dates.sort((a, b) => {
      return new Date(b.split('.')[2], b.split('.')[1]-1, b.split('.')[0]) - new Date(a.split('.')[2], a.split('.')[1]-1, a.split('.')[0]) 
});

Note: You can use any date format to create a JavaScript date object. 注意:您可以使用任何日期格式来创建JavaScript日期对象。

new Date(year, month(0-11) [, day [, hour [, minutes [, seconds [, milliseconds]]]]]);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM