Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift Firebase createdAt-时间戳与日期_Swift_Firebase - Fatal编程技术网

Swift Firebase createdAt-时间戳与日期

Swift Firebase createdAt-时间戳与日期,swift,firebase,Swift,Firebase,正在尝试按createdAt对快照数组排序。谷歌从日期格式改为时间戳后的困难 我尝试使用timestamp.dateValue将时间戳转换为日期 我用了这个,在他们用Date的时候很管用 self.tableData = self.tableData.sorted(by: { $0["createdAt"] as! Date > $1["createdAt"] as! Date }) 我试着使用时间戳,因为你不能排序直接对时间戳-我不能让它工作或有适当的语法 self.tab

正在尝试按createdAt对快照数组排序。谷歌从日期格式改为时间戳后的困难

我尝试使用timestamp.dateValue将时间戳转换为日期

我用了这个,在他们用Date的时候很管用

 self.tableData = self.tableData.sorted(by: { 
 $0["createdAt"] as! Date > $1["createdAt"] as! Date })
我试着使用时间戳,因为你不能排序直接对时间戳-我不能让它工作或有适当的语法

   self.tableData =  self.tableData.sorted(by: {
       $0["createdAt"] as Timestamp.dateValue() as! Date >
       $1["createdAt"] as Timestamp.dateValue() as! Date })
任何帮助都将不胜感激。知道谷歌为什么从日期改为时间戳吗?这使得分类更加困难。我知道您可以在请求期间进行排序,但我需要在数据库请求之后进行排序

我是这样做的:-

let currentArr = commentsArray.sorted(by: {
        $0.createdAt!.compare($1.createdAt!) == .orderedDescending
    })
映射数据时,将其映射为日期类型变量:-

let createdAt : Date? = snapshotValue["createdAt"] as? Date  
然后我对数组进行如下排序:-

let currentArr = commentsArray.sorted(by: {
        $0.createdAt!.compare($1.createdAt!) == .orderedDescending
    })

您可以直接获取已排序的数据,如下所示:-

    Firestore.firestore().collection(“samples”).order(by: "createdAt", descending: true).whereField(“sampleId”, isEqualTo: sampleId).addSnapshotListener({ (querySnapSHot, error) in })

时间戳比较方法对您有帮助吗引用createdAt有点模糊,不了解您在该字段中具体存储了什么。另外,您是否可以包括如何在数组中读取和存储该文档/字段的代码?原因是什么?NSDate实现为双精度,当使用快照中的时间戳作为后续查询的一部分时,会丢失精度并导致意外行为。另外,请参阅,因为它可以关闭以恢复以前的行为,注意您应该迁移到较新的时间戳格式。这过去是可行的,但Google目前正在使用时间戳而不是CreateDat的日期。您可以将值作为时间戳存储在firebase中。这是获取时间戳值后的代码。明白了。我希望不必修改我的数据库,也不必按照快照中提供的时间戳值直接排序。是的,除非您将createdAt值存储为时间戳,否则您不需要更改数据库。Google正在更改此设置。Firestore移动到Firebase函数中的时间戳。参考: