【发布时间】:2018-10-19 21:07:02
【问题描述】:
当用户点击提要中的帖子时,我想显示每条评论的发布时间。我正在尝试将 Date().timeIntervalSince1970 值转换为“x 时间前”的发布时间。
在视图加载之前,我为今天的日期声明一个 now 变量。
let now = Date()
日期是在我为 cmets 设置字典时分配的。
let commentValues: [String: Any] = [
"comment" : comment,
"uid": uid,
"commentDate": Date().timeIntervalSince1970
]
我正在获取这样的 cmets,其中我还调用日期函数并将其分配给情节提要中的日期标签。
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()
})
})
}
我已经设置了一个日期扩展,我正在尝试计算该日期的 timeAgo:
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"
}
}
正在显示日期,但我得到的结果是“-12983918 秒前”。如何将时间显示为“2s 前”或“1h 前”或“1w 前”等?
【问题讨论】:
-
你可以使用calendar.component...有机会我会发布一个例子。干杯!
标签: ios swift firebase time timestamp