在JQuery中按升序排列的订单日期

时间:2018-09-18 00:44:14

标签: javascript jquery html

我尝试按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对时间进行排序

2 个答案:

答案 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'))
});