在JavaScript中按日期时间排序对象



我的联系人都有与他们相关联的短信。每条短信记录都有time等属性。时间是一个时间戳字符串,格式如下例

2022-04-29T16:10:43-06:00

我正试图对这个短信数组进行排序,以便最新的是最后一个,最早的是数组中的第一个。我以为我把它钉牢了,但显然我没有。它仍然没有完全排序。

this.getRecent()
.then(contacts => {
const sorted = contacts.map(contact => {
contact.sms = contact.sms.sort((a,b) => (a.time.localeCompare(b.time));
return contact;
});
// rest of code here
})
.catch(err => this.handleError(err));

根据你的问题,我假设contact.sms对象包含一个对象数组,其中time是一个字符串(localeCompare被调用)。由于日期可以应用运算符,因此可以像对任何数字一样对它们进行排序。

const dates = [
new Date("2022-04-29T16:10:43-06:00"),
new Date("2023-04-29T16:10:43-06:00"),
new Date("2022-01-29T16:10:43-06:00")
]
console.log(dates)
dates.sort((a, b) => a - b)
console.log(dates)

对你来说,

// Sorts dates where the least recent is first.
contact.sms = contact.sms.sort((a,b) => new Date(a.time) - new Date(b.time));

您可以将它们解析为Date并比较毫秒:

contact.sms.sort((a,b) => new Date(a.time) - new Date(b.time));

或者交换ab,如果你想颠倒顺序。

最新更新