首页 > 解决方案 > 如何将数据作为时间戳数据类型发布到 Firestore - swift

问题描述

我想知道如何将数据发布StringFirestoreas Timestamp。我正在创建一个示例应用程序,它存储数据tableView并且数据将基于Timestamp.

因此,在编程中,我试图获取当前时间和日期,String但我不知道如何将数据设置为Firestoreas field is Timestamp。当我查询数据时,Firestore我想对数据进行排序Timestamp

let currentDateTime = Date()

// initialize the date formatter and set the style
let formatter = DateFormatter()
formatter.timeStyle = .long
formatter.dateStyle = .long

// get the date time String from the date object
formatter.string(from: currentDateTime)

TimestampFirestore包含日期和时间。我怎样才能String发布Firestore数据Timestamp

标签: swiftfirebasetimestampgoogle-cloud-firestore

解决方案


为什么要将其发布为String?这是我的Int替代方法

let timestamp = Int(Date().timeIntervalSince1970) // gives you an Int like 1534840591

然后,当您从 解析它时Firebase,将其传递给func类似这样的东西,以将该Int时间戳转换为日期:

 func timestampIntToString(integerTime: Int, timestampLabel: UILabel) {
    let timestampDate = Date(timeIntervalSince1970: Double(integerTime))
    let now = Date()
    let components = Set<Calendar.Component>([.second, .minute, .hour, .day, .weekOfMonth])
    let difference = Calendar.current.dateComponents(components, from: timestampDate, to: now)
    var timeText = ""

    if difference.second! <= 0 {
        timeText = "now"
    }
    if difference.second! > 0 && difference.minute! == 0 {
        timeText =  "\(difference.second!) sec ago"
    }
    if difference.minute! > 0 && difference.hour! == 0 {
        timeText =  "\(difference.minute!) min"
    }
    if difference.hour! > 0 && difference.day! == 0 {
        timeText =  "\(difference.hour!)h"
    }
    if difference.day! > 0 && difference.weekOfMonth! == 0 {
        timeText =  (difference.day == 1) ? "\(difference.day!)day" : "\(difference.day!) days ago"
    }
    if difference.weekOfMonth! > 0 {
        timeText =  (difference.weekOfMonth == 1) ? "\(difference.weekOfMonth!) w" : "\(difference.weekOfMonth!)w"
    }

    timestampLabel.text = timeText
}

推荐阅读