【问题标题】:Firebase query by date stringFirebase 按日期字符串查询
【发布时间】:2016-11-08 01:59:44
【问题描述】:

我知道可以按previous question中看到的时间戳查询,但是,如果日期格式如下:

{
  "lambeosaurus": {
     "date" : "2012-20-03",
     "length" : 12.5,
     "weight": 5000
  },
 "stegosaurus": {
     "date" : "2015-25-13",
     "length" : 9,
     "weight" : 2500
  }
}

我将如何按日期查询?

【问题讨论】:

    标签: javascript firebase firebase-realtime-database


    【解决方案1】:

    将其转换为时间戳:

    new Date('2012-20-03'.split('-').reverse().join('/')).getTime()
    

    一般:

       function toTimeStamp(dateString){
           return new Date(dateString.split('-').reverse().join('/')).getTime()
    
       }
    

    【讨论】:

    • 在我可以查询之前我是否必须在 firebase 上转换所有这些日期?
    • 给我firebase的github URL,我会修改源代码以支持这种语法:orderByChild(function(e){return new Date(e.date.split('-').........).getTime()})
    • 我用一些虚拟数据制作了一个虚拟火力基地:epilog-a3e16.firebaseio.com/flights.json
    【解决方案2】:

    您已将日期存储为字符串。当 Firebase 订购字符串时,它使用字典顺序。按此顺序,"2012-20-03" 位于 "2012-25-01" 之前。

    这就是您链接到的问题(以及 Firebase 文档)通常将日期存储为 timestamps 的原因。那些有关于日期的所有信息,在一个保证正确订购的单一数字中。

    或者,您可以将日期存储为字符串。但在这种情况下,您必须确保日期的格式也能按字典顺序正确排序。对于您的示例,这将是:"2012-01-25""2012-03-20"

    因此,在这种情况下,您唯一的选择是将数据结构更改为原始问题(和文档)中的内容或按您想要的顺序排列的字符串格式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-31
      • 1970-01-01
      • 1970-01-01
      • 2015-01-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多