我尝试按AM和PM顺序订购日期。但是面临一些问题。我已经为此添加了fiddle。有人可以帮我吗
function sortAscending(a, b) {
var date1 = $(a).find("time").text();
date1 = date1.split('/');
date1 = new Date(date1[2], date1[1] - 1, date1[0]);
var date2 = $(b).find("time").text();
date2 = date2.split('/');
date2 = new Date(date2[2], date2[1] - 1, date2[0]);
return date1 < date2;
}
$(document).ready(function() {
$('#wrapper .cards').sort(sortAscending).appendTo('#wrapper');
});
这段代码用于日期而不是时间。如何用AM或PM对时间进行排序
答案 0 :(得分:1)
仅使用片刻,毫无意义地尝试使用自己的日期函数。 JavaScript中的日期比较难,而且时刻几乎可以解决您遇到的所有日期要求。
function sortAscending(a, b) {
return moment(a).isBefore(b);
}
console.log(sortAscending(new Date(), new Date()));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>
答案 1 :(得分:0)
JS中的排序函数必须返回1,-1或0,这是返回布尔值。
您应该更改最后一行:
return a - b; //This will do the work
最终,您还可以像这样实现:
return (date1 < date2) ? -1 : (date1 > date2) ? 1 : 0;
这意味着如果date1之前在其前面放置,如果date1在date2之后,则在后面放置,否则不要移动它们。
只是一条建议,我就陷入了困境。提供
返回a-b <-b高于象征意义上的增长,就像音量图标一样。这将以升序排列。
返回b-a <-b比图形上的下降要高,如斜率。将物品按降序排列。
这帮助我牢记返回什么。
更新:事实证明,在jQuery集合中处理元素很困难,因此这样做有点费事:
function sortAscending(a, b) { <--This works outside of the realm of a jQuery object
var time = a.getElementsByTagName('time')[0]
date1 = time.textContent.split(' ')[0];
date1 = date1.split('/')
date1 = new Date(date1[2], date1[1] - 1, date1[0]);
var time2 = b.getElementsByTagName('time')[0]
date2 = time2.textContent.split(' ')[0];
date2 = date2.split('/');
date2 = new Date(date2[2], date2[1] - 1, date2[0]);
return date1 - date2;
}
$(document).ready(function() { <--This deconstruct, sort, and reconstruct a jQuery collection
$( $('#wrapper .cards').toArray().sort(sortAscending) ).appendTo($('#wrapper'))
});