Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
以UTC格式按日期对json进行排序_Json_Reactjs_Sorting - Fatal编程技术网

以UTC格式按日期对json进行排序

以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

我使用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]": "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]"
返回的日期未排序。如何确保这些返回的文件已排序

  • json中没有
    obj
    属性
  • 无需应用
    格式
    ,因为值变为字符串。我们可以比较物体的力矩
  • 键内的“[UTC]”不是标准日期格式,这会导致警告
  • 弃用警告:提供的值不是可识别的RFC2822或ISO格式。moment构造回到js Date(),这在所有浏览器和版本中都不可靠。不鼓励使用非RFC2822/ISO日期格式。有关更多信息,请参阅

    您可以尝试以下代码段修复上述问题:
    $(函数(){
    让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')