Попытка отсортировать дату и время по секундам - PullRequest
0 голосов
/ 24 сентября 2018

Я пытаюсь отсортировать время по секундам.Я могу отсортировать минуты, но не секунды.Я попробовал несколько вещей.У меня есть динамические данные, которые должны быть отсортированы в последнем порядке.Работает с часами, минутами и AM |Вечера, но не на секунды.Я использую моменты js.

function sortAscending(a, b) {
        const dateA = moment($(a).find('time').text(), 'DD/MM/YYYY hh:mm:ss a');
        const dateB = moment($(b).find('time').text(), 'DD/MM/YYYY hh:mm:ss a');

        return dateA.isBefore(dateB) ? 1 : dateA.isAfter(dateB) ? -1 : 0;
    };

Есть ли у нас какой-либо другой способ сортировки секунд.

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

Вы можете использовать второй параметр метода, который определяет точность, а не просто одно значение для проверки, с помощью day будет проверяться год, месяц и день.

let x = moment();
let y = monent();

x.isBefore(x, 'second'); // true
0 голосов
/ 24 сентября 2018

Ваш фрагмент ужасно неэффективен.Я предполагаю, что у вас есть список элементов с датами в них.Что вы можете сделать, так это перебрать список один раз и проанализировать все даты по временным меткам (числам), а затем просто отсортировать базу списка по этому:

let elements = Array.from(document.querySelectorAll("#container > span"));
let parsedDates = new Map(
    elements.map(e => [e, moment(e.textContent, 'DD/MM/YYYY hh:mm:ss a')])
);

// before sorting
console.log(elements.map(e => e.textContent));

elements.sort((a, b) => parsedDates.get(a) - parsedDates.get(b));

// after sorting
console.log(elements.map(e => e.textContent));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>

<div id="container">
  <span><time>01/01/2001 01:01:02 AM</time></span>
  <span><time>01/01/2001 01:01:01 AM</time></span>
  <span><time>01/01/2001 01:01:03 AM</time></span>
</div>

Если вам не нужен отсортированный список элементов, а вместо этого вы хотите отсортированный список дат, просто отсортируйте список parsedDates вместо:

let elements = Array.from(document.querySelectorAll("#container > span"));
let parsedDates = elements.map(e => moment(e.textContent, 'DD/MM/YYYY hh:mm:ss a'));

// before sorting
console.log(parsedDates);

parsedDates.sort((a, b) => a - b);

// after sorting
console.log(parsedDates);

// you can even format them
console.log(parsedDates.map(t => t.format('MMMM Do YYYY, h:mm:ss a')));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>

<div id="container">
  <span><time>01/01/2001 01:01:02 AM</time></span>
  <span><time>01/01/2001 01:01:01 AM</time></span>
  <span><time>01/01/2001 01:01:03 AM</time></span>
</div>
...