Я решил эту проблему, используя moment.js, потому что это проще и быстрее, но всегда код может быть настроен немного, если вы хотите сделать это без каких-либо фреймворков (надеюсь, что еще немного, если условия и преобразования строк)
Так Вы должны добавить moment.js к вашему проекту: а) путем добавления Src ссылку на ваш основной файл индекса HTML (где главный угловой селектор, polyfills и т.д.) с этого сайта https://cdnjs.com/libraries/moment.js/ б), но если это производство, я рекомендую добавить его через npm. http://momentjs.com/docs/ вот и другие возможности.
Тогда вы должны объявить переменную момент под операторы импорта и выше @Component аннотацию
declare var moment;
тогда, если и уже primeng модуль добавлен в Ваш проект, в HTML файл в р-DataTable тег primeng там р -column тегов и здесь в пределах этого тега нам нужно добавить Сортируемый = «обычай» и (sortFunction) = «mysort ($ событие)» как так:
<p-column field="date" header="Data" sortable="custom" (sortFunction)="mysort($event)"></p-column>
Дата отображается с п столбцов тега в DD. MM.YYYY строковый формат, например, например: 03.01.2017
После этого в компоненте, где мы извлекаем и массируем данные в массив, который используется для отображения данных в таблице, в моем примере с именами назначений нам нужно добавить функцию с именем mysort (потому что мы вызываем эту функцию в html p- колонка тег)
mysort(event) {
let comparer = function (a, b): number {
let formatedA = moment(a.date, "DD.MM.YYYY").format('YYYY-MM-DD');
let formatedB = moment(b.date, "DD.MM.YYYY").format('YYYY-MM-DD');
let result: number = -1;
if (moment(formatedB).isBefore(formatedA, 'day')) result = 1;
return result * event.order;
};
this.appointments.sort(comparer);
}
в моем примере a.date и b.date это строка, как "21.12.2016", что нам нужно форматировать для YYYY-MM-DD. Затем мы просто сравниваем даты.
И только это, я проверил этот код, и он работает. Надеюсь, что это поможет кому-то, и извините меня, если объяснение было написано в стиле учебника, но это мой первый ответ, и я хотел сделать это правильно :)
насчет если время и данные оба приходят? – comeback4you
Если время и данные сравниваются .format ('YYYY-MM-DD HH: mm: ss'); -> (момент (formatedB) .isBefore (formatedA)) result = 1; просто удаленное ключевое слово «день» будет сравнивать дату и время как – comeback4you