2016-01-22 28 views
0

我创建一个角度+ firebase食品杂志,我有一个关于日期的逻辑冻结以及如何最好地存储它们。我的数据结构如下:存储日期角度和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位数字,其中“2015年1月21日”将存储为20150021和“1月29日星期四2015“作为20150029.然后解析数字客户端来创建本地日期对象。

但是,好像我要么过度看待某些东西,要么过度思考。有没有更好的方法来实现这一点?

+0

下面快速回答。但是,如果您提供您拥有的代码以及它的问题是什么,那么它会更容易帮助您。请参阅http://stackoverflow.com/help/mcve –

回答

2

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

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

+0

确认使用'yyyyMMdd'确实是我真正需要的。事后看来,这可能不适合我的问题。感谢您的快速回复。 – Mox