以UTC格式按日期对json进行排序
我使用react JS从API端点获取一些数据,然后显示它。 我想在显示之前按日期和时间对其进行排序。 提取数据时,数据如下所示:以UTC格式按日期对json进行排序,json,reactjs,sorting,Json,Reactjs,Sorting,我使用react JS从API端点获取一些数据,然后显示它。 我想在显示之前按日期和时间对其进行排序。 提取数据时,数据如下所示: { "2021-03-09T07:47:24.897Z[UTC]": "Something happened", "2021-03-09T07:48:12.256Z[UTC]": "Test event", "2021-03-09T08:04:49.484Z[UTC
{
"2021-03-09T07:47:24.897Z[UTC]": "Something happened",
"2021-03-09T07:48:12.256Z[UTC]": "Test event",
"2021-03-09T08:04:49.484Z[UTC]": "Warning",
"2021-03-09T07:08:15.714Z[UTC]": "Test event 2",
"2021-03-09T07:47:24.736Z[UTC]": "Something bad happened 2"
}
我无法更改此json结构。我需要按日期和时间对其进行排序,并以这种格式显示YYYY-MM-ddh:MM:ss
我执行此操作的函数如下所示:
formatDate(obj) {
return Object.keys(obj).sort((a,b) => moment(a.obj).format('YYYY-MM-DD h:mm:ss') - moment(b.obj).format('YYYY-MM-DD h:mm:ss'))
}
然后对获取的json对象执行以下操作:
console.log(this.formatDate(json));
这样做将返回以下内容:
0: "2021-03-09T07:47:24.897Z[UTC]"
1: "2021-03-09T07:48:12.256Z[UTC]"
2: "2021-03-09T08:04:49.484Z[UTC]"
3: "2021-03-09T07:08:15.714Z[UTC]"
4: "2021-03-09T07:47:24.736Z[UTC]"
返回的日期未排序。如何确保这些返回的文件已排序
obj
属性格式
,因为值变为字符串。我们可以比较物体的力矩$(函数(){
让json={
“2021-03-09T07:47:24.897Z[UTC]:“发生了什么事”,
“2021-03-09T07:48:12.256Z[UTC]:“测试事件”,
“2021-03-09T08:04:49.484Z[UTC]:“警告”,
“2021-03-09T07:08:15.714Z[UTC]:“测试事件2”,
“2021-03-09T07:47:24.736Z[UTC]:“发生了不好的事情2”
};
log(“排序结果:”);
log(formattate(json));
});
//最好把它命名为sortDate
函数格式化日期(obj){
返回Object.keys(obj).sort((a,b)=>moment(a.replace(\[UTC\]”),moment(b.replace(\[UTC\]”,“”));
}
您的函数不清楚是否要格式化日期,或者按照问题的要求对日期进行排序,但您可以直接比较日期时间字符串进行排序,即
dateA.localeCompare(dateB)
将对象转换为键值对数组并按键值对数组进行排序,然后将键值对数组转换回对象
如果需要进行任何格式转换,则应通过映射操作进行转换,即将一组键从一种格式映射到另一种格式
要转换为UTC时间,请执行以下操作:
moment.utc(key.replace("[UTC]", "")).format('YYYY-MM-DD h:mm:ss')
const数据={
“2021-03-09T07:47:24.897Z[UTC]:“发生了什么事”,
“2021-03-09T07:48:12.256Z[UTC]:“测试事件”,
“2021-03-09T08:04:49.484Z[UTC]:“警告”,
“2021-03-09T07:08:15.714Z[UTC]:“测试事件2”,
“2021-03-09T07:47:24.736Z[UTC]:“发生了不好的事情2”
};
const sortedData=Object.fromEntries(
Object.entries(data.sort(([keyA],[keyB])=>keyA.localeCompare(keyB))
);
控制台日志(sortedData);
const mappedData=Object.fromEntries(
Object.entries(sortedData.map)([key,value])=>[
矩.parseZone(key.replace(“[UTC]”,“)).format('YYYY-MM-ddh:MM:ss'),
价值
])
);
console.log(mappedData)代码>
Object.keys(obj).sort((a,b)=>新日期(a.replace(“\[UTC\]”,”)-新日期(b.replace(“\[UTC\]”,”))
有趣的是,我一直在看[UTC]位,我从来没有想到这不是标准的UTC日期。我知道不是,但我从没想过要把它拿走。非常感谢,我用你的建议解决了这个问题。你是对的,我可能把这个问题描述错了。我想排序并更改格式,但我遇到的问题只是排序。我现在让它工作了。谢谢你的意见。@davidb我编辑得不错,因为你一定在复习。MomentJS不能很好地处理时区,我添加了日期格式映射。应该有助于进一步澄清。干杯
moment.utc(key.replace("[UTC]", "")).format('YYYY-MM-DD h:mm:ss')