一旦 13 位时间戳保存在 Firebase 中,如何在 Xcode 中获取并转换为日期



这是下面的数据库。我需要获取时间戳的"caption"子项,并将其转换为 Xcode 中的日期格式。

"UserS" : {
    "K1eqsVZfKGgIf0sS1UZcPNxY62x1" : {
      "Education" : "William Taft Elementary",
      "PhotoPosts" : "https://firebasestorage.googleapis.com/v0/b/daylike-2f938.appspot.com/o/images%2FPhotoPosts?alt=media&token=fd92856e-f7d2-4558-82c4-ee49f580icc5e",
      "caption" : 1563277511065,
      "users" : "jane19@aol.com"
    },

这是我在超级视图下加载的内容。

let databaseRef = Database.database().reference()
    let uid = Auth.auth().currentUser!.uid
    databaseRef.child("UserS").child(uid).child("caption").observeSingleEvent(of: .value, with: { (snapshot) in
        guard let message = snapshot.value as? [String:String] else { return }
        let caption = message["caption"]
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "yyyy-MM-dd hh:mm:ss.SSSSxxx"
        guard let date = dateFormatter.date(from: caption!) else {
        fatalError("ERROR: Date conversion failed due to mismatched format.")
    }
        if (snapshot.exists()){
            print ("mmmmmmm")
        }else{
            print("badddddd")
        }

    })

最后,我想以日期格式打印出时间戳,以便我可以检查它是 24 小时前的。

">

13 位时间戳"是自 1970 年 1 月 1 日 UTC 以来的milliseconds数。

自该时间点以来,Date已经具有时间戳的初始值设定项。唯一的区别是它的seconds数,而不是milliseconds

因此,您唯一要做的就是将其除以 1000:

// skipping unrelevant boilerplate
// assuming caption is Int
let date = Date(timeIntervalSince1970: TimeInterval(caption)/1000.0) // for `1563277511065` it would be `"Jul 16, 2019 at 11:45 AM"`(UTC)
// skipping unrelevant boilerplate

编辑

要检查时间戳中的日期是否"早于"24 小时,您有以下几种选择:

  1. 获取datenow之间的差异,并检查它是否少于 24 小时:

    let secondsInDay = 86400
    if (-date.timeIntervalSinceNow < secondsInDay) { … } // negative, because that date would be in the past
    
  2. 使用日历前获取一天:

    let calendar = Calendar.autoupdatingCurrent // or whatever you prefer
    let dayBefore = calendar.date(
                                  byAdding: .day, 
                                  value: -1, 
                                  to: Date(), 
                                  wrappingComponents: true)!
    if (date > dayBefore) { … }
    

既然你听UserS->caption那么snapshot.value就是一个Int。 所以你需要

databaseRef.child("UserS").child(uid).child("caption").observeSingleEvent(of: .value, with: { (snapshot) in
    guard let caption = snapshot.value as? Int else { return }
    print(caption)
    let date = Date(timeIntervalSince1970: TimeInterval(caption)/1000.0)
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd hh:mm:ss.SSSSxxx"
    let res = dateFormatter.string(from: date) 
    print(res) 
}

编辑:

if Calendar.current.dateComponents([.day], from:date, to: Date()).day! > 0 {
     /// at least 1 day passed 
}

相关内容

  • 没有找到相关文章

最新更新