2 回答
TA贡献1807条经验 获得超9个赞
好吧,经过 4-6 小时的尝试,我终于找到了解决方案。问题源于 ECMAScript 时间戳格式。
我的时间戳格式:“YYYY-MM-DD HH:MM:SS”
支持的 ECMAScript 时间戳:“YYYY-MM-DDTHH:MM:SS” - “T”
工作代码:
const sorted = notifications.slice().sort((x, y) => {
var dateStringX = x.created_at.replace(" ", "T");
var dateStringY = y.created_at.replace(" ", "T");
return new Date(dateStringY).getTime() - new Date(dateStringX).getTime();
});
setNotifications(sorted);
TA贡献1884条经验 获得超4个赞
从代码中不确定,但 notification.created_at 是什么?那是在epochmilli吗?它只是一个数字吗?如果是这样,则无需将其转换为日期,然后运行 .getTime()。您应该能够对 x.created_at - y.created_at 进行排序。这可能就是问题所在。
此外,顺便说一句,您可以将此代码简化为:
const { notifications } = useContext(MainContext);
const sortedNotification = [...notifications].sort((x, y) => x.created_at - y.created_at);
return (... your view)
这样做可以为您节省重新渲染,因为您不必设置状态。
希望有帮助!
添加回答
举报