swift ) 현재 시간을 기준으로 특정 시간과의 차이 계산하기

댓글이나 게시글의 목록을 보면 현재시간을 기준으로 몇분전, 몇일전, 혹은 날짜로 시간이 나와있는 경우가 있습니다. 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

 

Apple Developer Documentation

 

developer.apple.com

 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 ?? ""
        }
    }