无法在angular 2项目中使用带有时间插件的datetime对出生日期进行排序

时间:2019-03-04 22:04:33

标签: angular datatables momentjs

我有一个显示ID,姓名和出生日期的表格,如下所示:

<table id="example" class="display nowrap" style="width:100%">
  <tr>
    <td>id</td>
    <td>name</td>
    <td>date of birth</td>
  </tr>
  <tr *ngFor="let item of items">
    <td>{{ item.id }}</td>
    <td>{{ item.name }}</td>
    <td>{{ item.dob }}</td>
  </tr>
</table>

我有以下代码来显示数据表:

declare const $;
export class Sampleomponent implements OnInit {

items: any[] = [
{ 'id': 1, 'name': 'sample1', "dob": '1900-01-01T05:00:00'  },
{ 'id': 2, 'name': 'sample2', "dob": '1937-10-11T05:00:00'  },
{ 'id': 3, 'name': 'sample3', "dob": '1954-02-01T05:00:00'  },
{ 'id': 4, 'name': 'sample4', "dob": '1940-12-01T05:00:00'  },
{ 'id': 5, 'name': 'sample5', "dob": '1910-01-01T05:00:00'  },
{ 'id': 6, 'name': 'sample6', "dob": '1901-10-09T05:00:00'  },
];

ngOnInit() {
    setTimeout(() => {
      this.loadStyles();
    }, 300);
  }

loadStyles() {
$(function () {
  $.fn.dataTable.moment('dd/MM/yyyy');

  $('#example').DataTable( {
    dom: 'Bfrtip',
    title: 'test',
    buttons: [
        'excel', 'pdf', 'print'
    ]
  });
});
}

}

此表能够显示该表并对所有列进行排序,但dob列除外。我一直跟随着他们的documentation,但它给了我相同的结果。出生日期或任何其他日期字段未成功排序。请假设dob来自服务器,格式为datetime,并且我具有所有必需的js代码。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

您被认为这是错误的方向:

  1. 在DataTables中,如果日期不可解析,则只需要特别注意它们的日期即可;例如,如果Date.parse()返回NaN,则需要一个插件/格式化程序。

  2. DataTables momentjs排序插件就是这样的格式化程序。它用于将数据转换为正确的可解析格式,而不是显示或显示数据。

  3. 您的日期非常好,不需要moment.js。如果日期的任何是非法的,例如null,则本机排序会中断。为了克服这个问题,您可以通过{p>

  4. 强制type
    columns: [
      { data: 'dob', type: 'date' }
    ]
  1. 我相信您实际上想显示日期格式为DD/MM/YYYYdd/MM/yyyy返回类似Mo/01/yyyy的日期);您可以使用render回调来显示格式化的日期,同时保持本机datetime排序:
    columns: [
      { data: 'dob', 
        type: 'date',
        render: function(data, type) {
          return type == 'display' ? moment(data).format('DD/MM/YYYY') : data
        }
      } 
    ]