iOSエンジニアのつぶやき

毎朝8:30に iOS 関連の技術について1つぶやいています。まれに釣りについてつぶやく可能性があります。

【Swift】Date で「〇〇日前」的なやつを表示する

今回は Swift の Date で、現在から特定の Date までがどの程度離れているかを示す Text の表示方法を簡単に紹介したいと思います👀

結論

今回は下記のように DateExtension メソッドを追加し、1週間以上前の Date に関しては日付を取得できるようにしてみました。Calendarインスタンスメソッド dateComponents(_:from:to:) を使用することで二つの Date 間の差異がわかります。

developer.apple.com

extension Date {
    static let dateFormatter: DateFormatter = {
        return DateFormatter()
    }()

    func dateText() -> String {
        Date.dateFormatter.dateFormat = "yyyy/MM/dd(E)"
        return Date.dateFormatter.string(from: self)
    }

    func agoText() -> String {
        let now = Date()
        let (earliest, latest) = self < now ? (self, now) : (now, self)
        let components = Calendar.current.dateComponents([.year, .month, .weekOfYear, .day, .hour, .minute, .second],
                                                         from: earliest, to: latest)
        if let year = components.year, year > 0 {
            return self.dateText()
        }
        if let month = components.month, month > 0 {
            return self.dateText()
        }
        if let weekOfYear = components.weekOfYear, weekOfYear > 0 {
            return self.dateText()
        }
        if let day = components.day, day > 0 {
            return "\(day)日前"
        }
        if let hour = components.hour, hour > 0 {
            return "\(hour)時間前"
        }
        if let minute = components.minute, minute > 0 {
            return "\(minute)分前"
        }
        if let second = components.second, second > 0 {
            return "\(second)秒前"
        }
        return "たった今"
    }
}

また、dateFormatter の取り扱いについては以前の記事でも紹介したので気になる方は見てみてください。

yamato8010.hatenablog.com

という感じで本日も以上になります🍺

その他の記事

yamato8010.hatenablog.com

yamato8010.hatenablog.com

yamato8010.hatenablog.com