gpt4 book ai didi

javascript - Firebase 按日期排序从今天起的值不起作用

转载 作者:行者123 更新时间:2023-12-03 02:50:58 25 4
gpt4 key购买 nike

如何获取按日期字段值排序的数据?我想根据 now() 的 starts 字段值显示所有事件?我没想到这会那么难,但我无法让它正常工作。

我的 Firebase 数据是:

    "events" : {
"-KwX5oG6TYNWWhLYC5rx" : {
"ends" : "2018-01-04T23:30:47.071Z",
"starts" : "2018-01-02T23:30:47.062Z",
"title" : "Event 1"
},
"-L0Id2D34D2Sd2T5oyXX" : {
"ends" : "2017-12-27T23:30:39.566Z",
"starts" : "2017-12-26T23:30:39.552Z",
"title" : "Event 2"
}
}

查询firebase数据的代码:

  const today = new Date().toISOString(); 
const ref = FirebaseRef.child("events").orderByChild('starts').startAt(today);

return ref.on('value', (snapshot) => {
const events = snapshot.val() || {};

// DO SOMETHING
});

我尝试将数据存储为 Unix 时间戳而不是 ISO 字符串,但仍然不起作用。

最佳答案

问题很可能是由于您对查询结果执行 snapshot.val() 引起的。当您从 Firebase 数据库请求有序数据时,您会返回三件事:键、值和项目的顺序。

当您在快照上调用 val() 时,您会返回值的 JSON 表示形式,其中仅包含键和值的空间。由于 JSON 对象中属性的顺序未定义,因此结果的顺序也是未定义的(尽管大多数浏览器显示它们按键排序)。

要解决此问题,请使用 Snapshot.forEach() 迭代快照中的结果:

return ref.on('value', (snapshot) => {
var events = [];
snapshot.forEach((child) => {
events.push(child.val());
});
console.log(events);
});

关于javascript - Firebase 按日期排序从今天起的值不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47861264/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com