我正在尝试用秒排序时间。我可以排序分钟,但不能排序秒。我尝试了几件事。我有需要按最新顺序排序的动态数据。它适用于小时,分钟和上午|下午,但没有秒。我正在使用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;
};
我们还有其他方法可以对秒进行排序吗?
答案 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