存储带有角度和火基的日期

Storing dates with angular and firebase

本文关键字:日期 存储      更新时间:2023-09-26

我正在创建一个角度+火碱食品日志,我有一个关于日期以及如何最好地存储它们的逻辑冻结。我的数据结构如下所示:

{
    "uid": {
        "profile": {
            "name": "name"
        },
        "journal": {
            "date1": {
                "breakfast": "",
                "lunch": "",
                "dinner": ""
            },
            "date2": {
                ...
            }
        }
    }
}

显然,我只想设置一次"日期"值,并能够设置它并从任何时区检索它。我最初将"date"键设置为四舍五入的时间戳,小时、分钟、秒都设置为 0。但这在时区问题上不起作用。

然后我决定只使用 dateObject.toDateString() 作为唯一的"date"键。这工作得很好,直到我意识到这样做会限制我查询火碱的方式。

我希望能够查询火碱的天数以及维持秩序。例如,假设我想查看"2015 年 1 月 21 日星期三"到"2015 年 1 月 29 日星期四"的条目。获取这些天的数据需要单独的查询和 Firebase 请求。如果我存储了一个数字,我可以使用 firebase 的范围查询;startAt()、endAt() 和 equalTo()。

我目前的解决方案/想法是存储一个由日期对象的 4 位年份、2 位月份和 2 位日期组成的 8 位数字,其中"2015 年 1 月 21 日星期三"将存储为 20150021,"2015 年 1 月 29 日星期四"存储为 20150029。然后只需解析数字客户端即可创建本地日期对象。

但似乎我要么是看得太多了,要么是想多了什么。有没有更好的方法来实现这一目标?

yyyyMMdd格式存储日期是相当普遍的。它的优点是结果值在数值上是可比的,即明天的数字大于今天的数字。

更常见的替代方案是存储"自纪元以来的(毫秒)秒"。这不仅在数字上具有可比性,而且也是Date.now()返回并可以传递到new Date()