【问题标题】:Storing dates with angular and firebase使用 Angular 和 Firebase 存储日期
【发布时间】:2016-01-22 22:48:44
【问题描述】:

我正在创建一个 angular + firebase 食品日记,并且我正在对日期以及如何最好地存储它们进行逻辑冻结。我的数据结构如下:

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

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

然后我决定只使用 dateObject.toDateString() 作为唯一的“日期”键。这很好,直到我意识到这样做会限制我查询 firebase 的方式。

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

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

但似乎我要么忽略了某些事情,要么过度思考了某些事情。有没有更好的方法来做到这一点?

【问题讨论】:

  • 下面的快速回答。但是,如果您提供您拥有的代码以及它的问题所在,那么提供帮助会容易得多。见stackoverflow.com/help/mcve

标签: javascript angularjs firebase


【解决方案1】:

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

一个更常见的替代方法是存储“自纪元以来的(毫秒)秒”。这不仅在数值上具有可比性,而且也是Date.now() 返回的内容,并且可以传递给new Date()

【讨论】:

  • 确认可以使用yyyyMMdd 是我真正需要的。事后看来,这可能不是我的问题的合适论坛。感谢您的快速回复。
猜你喜欢
  • 1970-01-01
  • 2018-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-11
  • 2019-05-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多