我使用observeEventType .ChildAdded来加载包含Firebase服务器所有时间戳的所有邮件。问题是Firebase始终首先触发占位符时间戳(也称为本地时间),然后将其替换为具有来自服务器的正确时间戳的第二个回调。此行为需要加载消息页两次以获取正确的时间戳,因为它第一次只显示本地时间。好吧,我已经找到了一种只显示正确时间戳的方法。通过使用.ChildChanged,我可以忽略第一个时间戳并只检索第二个时间戳。然而,这次回电给了我未来的时间,恰好提前两分钟,我不知道如何解决这个问题。我用Google搜索了几天,但没有运气。请帮帮我。以下是我的代码:
保存时间戳:
let timestamp = FirebaseServerValue.timestamp() let newData = ["sender": "John", "timestamp": timestamp]
ref.childByAppendingPath("messages").childByAppendingPath(ref.authData.uid).setValue(newData)
在我的消息VC中,检索时间戳:
handle = ref.observeEventType(.ChildChanged, withBlock: { (snapshot) in
let text = snapshot.value["message"] as! String
let sender = snapshot.value["sender"] as! String
let timestamp = snapshot.value["timestamp"] as! NSTimeInterval
let date = NSDate(timeIntervalSince1970: timestamp/1000)
// TESTING DATE
let dateFormatter = NSDateFormatter()
dateFormatter.AMSymbol = "AM"
dateFormatter.PMSymbol = "PM"
dateFormatter.dateFormat = "hh:mm, MM'/'dd'/'YY"
let dateString = dateFormatter.stringFromDate(date)
print(dateString)
输出
03:37, 02/14/16
但当前时间是:
02:35, 02/14/16