排序日期数组TimeTime
问题描述:
我有一个对象的数组,具有日期和时间的属性,即时通讯尝试按desc或asc排序,但它不工作,它得到所有混合DA数组。排序日期数组TimeTime
我的代码:
var myDateTime = [
{date: "2016-06-08 18:10:00"},
{date: "2016-04-26 20:01:00"},
{date: "2017-02-06 14:38:00"},
{date: "2017-01-18 17:30:21"},
{date: "2017-01-18 17:24:00"}
];
var sortIt = myDateTime.sort(function(a, b) {
return new Date(a.date) < new Date(b.date);
});
答
排序要求0,1或-1的值。
adate = new Date(a.date)
bdate = new Date(b.date)
return adate > bdate ? -1 : adate < bdate ? 1 : 0
或者更简单,
array.sort(function(a,b){
return new Date(b.date) - new Date(a.date);
});
答
这应该做的伎俩:
var sortIt = myDateTime.sort(function(a, b) {
var dateA = new Date(a.date);
var dateB = new Date(b.date);
return dateA < dateB ? -1 :(dateA > dateB ? 1 : 0);
});
答
随着ISO 8601日期,你可以只使用。
var myDateTime = [{ date: "2016-06-08 18:10:00" }, { date: "2016-04-26 20:01:00" }, { date: "2017-02-06 14:38:00" }, { date: "2017-01-18 17:30:21" }, { date: "2017-01-18 17:24:00" }];
myDateTime.sort(function (a, b) {
return a.date.localeCompare(b.date);
});
console.log(myDateTime);
.as-console-wrapper { max-height: 100% !important; top: 0; }
决不解析与Date构造函数的字符串(或Date.parse,两者是等价的解析)的分析在很大程度上是依赖于实现和不一致。 '新日期(a.date)'在Safari中返回无效日期。此外,* sort *函数应返回小于零,零或大于零的值。返回一个布尔值将被转换为0或1,所以不会正确排序。 – RobG