尝试用秒排序日期和时间

时间:2018-09-24 02:19:07

标签: javascript jquery momentjs

我正在尝试用秒排序时间。我可以排序分钟,但不能排序秒。我尝试了几件事。我有需要按最新顺序排序的动态数据。它适用于小时,分钟和上午|下午,但没有秒。我正在使用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 :(得分:0)

您的代码段效率极低。我假设您有一个包含日期的元素列表。您可以做的就是遍历列表一次,然后将所有日期解析为时间戳(数字),然后根据该列表对列表进行排序:

UTF-8
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));

如果您不想要元素的排序列表,而是想要日期的排序列表,只需对parsedDates列表进行排序即可:

<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>
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')));

答案 1 :(得分:0)

您可以使用确定精度的方法的第二个参数,而不仅仅是要检查的单个值,使用day可以检查年,月和日。

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

x.isBefore(x, 'second'); // true