我试图按desc
明智地排序日期。但得到错误的结果。任何人帮助我?其实我的日期值是“DD / MM / YYYY”
这是我的尝试:
var sortDate = [
"08/10/2017",
"08/03/2017",
"07/04/2017",
"07/09/2016",
"07/08/2017",
"22/07/2017",
"16/12/2017"
]
sortDate.sort(function(a,b){
var aComps = a.split("/");
var bComps = b.split("/");
new Date( bComps[2] +"/"+ bComps[1] +"/"+ bComps[0]) -
new Date( aComps[2] +"/"+ aComps[1] +"/"+ aComps[0] )
})
console.log(sortDate)
答案 0 :(得分:4)
您的数据似乎已经有0
前缀填充,因此日期和月份的值始终为2位数。
所以,无需解析为日期,只需使用localeCompare
进行字符串比较
return ( aComps[2] + aComps[1] + aComps[0] ).localeCompare( bComps[2] + bComps[1] + bComps[0] );
<强>演示强>
var sortDate = [
"08/10/2017",
"08/03/2017",
"07/04/2017",
"07/09/2016",
"07/08/2017",
"22/07/2017",
"16/12/2017"
]
sortDate.sort(function(a,b){
var aComps = a.split("/");
var bComps = b.split("/");
return ( aComps[2] + aComps[1] + aComps[0] ).localeCompare( bComps[2] + bComps[1] + bComps[0] );
})
console.log(sortDate)
答案 1 :(得分:1)
您可以创建ISO 8601日期字符串,并将其与String#localeCompare
一起用于排序。
var sortDate = ["08/10/2017", "08/03/2017", "07/04/2017", "07/09/2016", "07/08/2017", "22/07/2017", "16/12/2017"];
sortDate.sort(function (a, b) {
function getISO(s) {
return s.replace(/(\d{2})\/(\d{2})\/(\d{4})/, '$3-$2-$1');
}
return getISO(a).localeCompare(getISO(b));
});
console.log(sortDate);
答案 2 :(得分:0)
您需要从函数返回值:
sortDate.sort(function(a,b){
var aComps = a.split("/");
var bComps = b.split("/");
return new Date( bComps[2] +"/"+ bComps[1] +"/"+ bComps[0]) -
new Date( aComps[2] +"/"+ aComps[1] +"/"+ aComps[0] )
})
&#13;
答案 3 :(得分:0)
你可以做这样的事情
var sortDate = [
"08/10/2017",
"08/03/2017",
"07/04/2017",
"07/09/2016",
"07/08/2017",
"22/07/2017",
"16/12/2017"
]
sortDate.sort(function(a,b){
var aComps = a.split("/").reverse().join("/");
var bComps = b.split("/").reverse().join("/");
return new Date(aComps) -
new Date(bComps )
})
console.log(sortDate)
&#13;
答案 4 :(得分:0)
你可以试试这个
var sortDate = [
"08/10/2017",
"08/03/2017",
"07/04/2017",
"07/09/2016",
"07/08/2017",
"22/07/2017",
"16/12/2017"
]
sortDate.sort(function(a,b){
var aComps = a.split("/");
var bComps = b.split("/");
var date1 = new Date();
var date2 = new Date();
console.log(a)
date1.setMonth(aComps[1]-1)
date1.setFullYear(aComps[2]);
date1.setDate(aComps[0]);
console.log(date1)
console.log(b)
date2.setMonth(bComps[1]-1)
date2.setFullYear(bComps[2]);
date2.setDate(bComps[0]);
console.log(date2)
return date2 - date1;
})
console.log(sortDate)
答案 5 :(得分:0)
你可以使用Date,但它比简单的字符串比较慢。
您可以使用String.prototype.localeCompare(),但它比数字比较慢得多。
为了使其有效并优化您的功能,您可以这样做:
var dates = [
"08/10/2017",
"08/03/2017",
"07/04/2017",
"07/09/2016",
"07/08/2017",
"22/07/2017",
"16/12/2017"
]
dates.sort(function (a, b) {
arA = a.split("/");
arB = b.split("/");
return Number(arA[2] + arA[1] + arA[0]) - Number(arB[2] + arB[1] + arB[0]);
});
console.log(dates);