我正在尝试在Swift应用中使用Firebase时间戳。我想将它们存储在Firebase中,并将其用作应用程序中的本机NSDate对象。
文档说他们是Unix时代,所以我尝试了:
NSDate(timeIntervalSince1970:FirebaseServerValue.timestamp)
没有运气。
这个:
FirebaseServerValue.timestamp
退货
0x00000001199298a0
根据调试器。传递这些时间戳的最佳方法是什么?
ServerValue.timestamp()与在Firebase中设置普通数据有些不同。它实际上没有提供时间戳。而是提供一个值,该值告诉Firebase服务器用时间填写该节点。使用此功能,您应用的时间戳全部来自一个来源,即Firebase,而不是用户设备碰巧所说的任何时间戳。
ServerValue.timestamp()
当您(从观察者)取回该值时,您将获得自该纪元以来的时间(以毫秒为单位)。您需要将其转换为秒以创建NSDate。这是一段代码:
let ref = Firebase(url: "<FIREBASE HERE>") // Tell the server to set the current timestamp at this location. ref.setValue(ServerValue.timestamp()) // Read the value at the given location. It will now have the time. ref.observeEventType(.Value, withBlock: { snap in if let t = snap.value as? NSTimeInterval { // Cast the value to an NSTimeInterval // and divide by 1000 to get seconds. println(NSDate(timeIntervalSince1970: t/1000)) } })
您可能会发现您收到两个带有非常接近的时间戳的事件。这是因为在从Firebase收到回音之前,SDK将在时间戳上进行最佳猜测。一旦从Firebase听到了实际值,它将再次引发Value事件。