댓글이나 게시글의 목록을 보면 현재시간을 기준으로 몇분전, 몇일전, 혹은 날짜로 시간이 나와있는 경우가 있습니다. Swift에서는 Calender를 이용하여 계산할 수 있습니다.
서버에서 생성 시간을 받아오고 나서 우선 Calender로 계산할 수 있는 시간 형식을 만들어줍니다.
private func calculateDate(to dateStr: String) -> Date {
//서버에서 받은 시간이 2022-06-21T14:06:35.288Z 형식으로 되어있으므로 Calender로 계산할 수 있는 형식으로 만들기
var sliceDateStr = dateStr.components(separatedBy: ["T", "."])
sliceDateStr.removeLast()
let joinedDateStr = sliceDateStr.joined(separator: "/")
let dateformatter = DateFormatter()
dateformatter.dateFormat = "yyyy-MM-dd/HH:mm:ss"
dateformatter.timeZone = TimeZone(identifier: "kr") //한국이므로 kr
guard let date = dateformatter.date(from: joinedDateStr) else {
return Date()
}
return date
}
그리고 현재 시간으로부터 얼마나 경과했는지 계산을 해줍니다. Calendar의 dateComponents를 이용해 계산을 해줍니다. 저는 계산을 할때 분단위로 해주었습니다. 다른 시간 단위로 하려거나 다른방법으로 하시려면 아래의 공식문서를 참고하시는게 좋을것 같네요.
https://developer.apple.com/documentation/foundation/calendar
var createDate: String {
let createDate = calculateDate(to: reviewModel.createdAt)
//현재시간에다가 서버에서 받아온 시간의 분차이 계산
guard let dateInterval = Calendar.current
.dateComponents(.init([.minute]),
from: createDate,
to: Date()).minute else {
return ""
}
if dateInterval < 60 {
return "\(dateInterval)분"
} else if dateInterval <= 1440 {
return String(dateInterval / 60) + "시간"
} else {
return reviewModel.createdAt.components(separatedBy: "T").first ?? ""
}
}
'iOS > 앱 개발' 카테고리의 다른 글
클린 아키텍처+MVVM+Coordinator 패턴을 이용한 다중 소셜 로그인 구현 (0) | 2022.11.12 |
---|---|
FirstResponder, Responder chain (0) | 2022.11.06 |
IOS에서 POP, OOP 어떤것을 써야 하는가! 그것이 문제로다 (0) | 2022.08.05 |
swift 캡슐화, 은닉화 (0) | 2022.07.28 |
테이블뷰에서 NSCache 사용하기 (0) | 2022.07.21 |