Невозможно отсортировать дату рождения, используя плагин datetime с моментом в проектах angular 2 - PullRequest
0 голосов
/ 05 марта 2019

У меня есть таблица, которая отображает идентификатор, имя и дату рождения, как показано ниже:

<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.Я следовал за их документацией , но это дало мне тот же результат.Дата рождения или любое другое поле даты не были успешно отсортированы.Пожалуйста, предположите, что dob приходит с сервера в формате datetime, и у меня есть все необходимые коды js.Любая помощь будет оценена!

1 Ответ

0 голосов
/ 05 марта 2019

Вы восприняли это немного в неправильном направлении:

  1. В DataTables вам нужно особенно тщательно следить за датами, если они не разбираются, т. Е. Если Date.parse() returnNaN вам понадобится плагин / форматтер.

  2. Плагин сортировки моментов DataTables - это такой форматтер.Он используется для преобразования данных в правильный анализируемый формат, а не для показа или отображения данных.

  3. Ваши даты в полном порядке, moment.js не требуется.Собственная сортировка прерывается, если любая дат недопустима, например, null.Чтобы преодолеть это, вы можете заставить type на

    columns: [
      { data: 'dob', type: 'date' }
    ]
Полагаю, вы действительно хотите показать даты в формате DD/MM/YYYY (dd/MM/yyyy вернуть что-то вроде Mo/01/yyyy);Вы можете использовать обратный вызов render для отображения форматированных дат при сохранении собственной сортировки даты и времени:
    columns: [
      { data: 'dob', 
        type: 'date',
        render: function(data, type) {
          return type == 'display' ? moment(data).format('DD/MM/YYYY') : data
        }
      } 
    ]
...