Когда пользователь нажимает на сообщение в ленте, я хочу отобразить время публикации каждого комментария. Я пытаюсь преобразовать значение Date (). TimeIntervalSince1970 в "x time ago", когда оно было опубликовано.
Перед просмотром загрузок я объявляю переменную now для текущей даты.
let now = Date()
Дата назначается, когда я настраиваю словарь для комментариев вроде.
let commentValues: [String: Any] = [
"comment" : comment,
"uid": uid,
"commentDate": Date().timeIntervalSince1970
]
Я получаю такие комментарии, где я также вызываю функцию даты и назначаю ее метке даты в раскадровке.
var comments = [Comment]()
fileprivate func fetchComments() {
guard let postID = self.post?.id else {return}
let commentRef = Database.database().reference().child("comments").child(postID)
commentRef.observe(.childAdded, with: { (snapshot) in
guard let dict = snapshot.value as? [String: Any] else {return}
guard let comment = dict["comment"] as? String else {return}
guard let uid = dict["uid"] as? String else {return}
guard let commentDate = dict["commentDate"] as? Double else {return}
let userRef = Database.database().reference().child("users/\(String(describing: uid))/profile")
userRef.observe(.value, with: { snapshot in
guard let value = snapshot.value as? [String:Any] else {return}
let username = value["username"]
let uid = dict["uid"]
let email = value["email"]
let myTimeInterval = TimeInterval(commentDate)
let time = Date(timeIntervalSinceNow: myTimeInterval)
let userProfile = User(uid: uid as! String, username: username as! String, email: email as! String)
let comment = Comment(uid: uid as! String, user: userProfile, comment: comment, time: time.timeAgoDisplay())
self.comments.append(comment)
self.commentCollectionView.reloadData()
})
})
}
Я установил расширение даты, в котором я пытаюсь вычислить время для даты:
extension Date {
func timeAgoDisplay() -> String {
let secondsAgo = Int(Date().timeIntervalSince(self))
let minute = 60
let hour = 60 * minute
let day = 24 * hour
let week = 7 * day
let month = 4 * week
let year = 12 * month
if secondsAgo < minute {
print("\(secondsAgo)s ago")
return "\(secondsAgo)s ago"
} else if secondsAgo < hour {
return "\(secondsAgo)m ago"
} else if secondsAgo < day {
return "\(secondsAgo)hr ago"
} else if secondsAgo < week {
return "\(secondsAgo)d ago"
} else if secondsAgo < month {
return "\(secondsAgo)w ago"
} else if secondsAgo < year {
return "\(secondsAgo)mo ago"
}
return "\(secondsAgo)yr ago"
}
}
Дата отображается, но я получаю результат как -12983918s назад. Как отобразить время как «2 с. Назад», «1 ч. Назад» или «1 ч. Назад» и т. Д.