iOSエンジニアのつぶやき

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

【Swift】Date型で同じ年、月、週かどうかを取得できるようにする

今回はタイトルの通り SwiftDate 型で、2つの Date が同じ年、月、週かどうかを取得する方法を紹介したいと思います🏃🏻‍♂️

方法

とりあえずコードは下記のようになります。今回は DateExtension として定義しています。

extension Date {
    func isEqual(to date: Date, toGranularity component: Calendar.Component, in calendar: Calendar = .current) -> Bool {
        calendar.isDate(self, equalTo: date, toGranularity: component)
    }

    func isInSameYear(as date: Date) -> Bool {
        isEqual(to: date, toGranularity: .year)
    }

    func isInSameMonth(as date: Date) -> Bool {
        isEqual(to: date, toGranularity: .month)
    }

    func isInSameWeek(as date: Date) -> Bool {
        isEqual(to: date, toGranularity: .weekOfYear)
    }
}

2つの Date の比較は Calendarインスタンスメソッド isDate(_:equalTo:toGranularity:) で行います。isDate(_:equalTo:toGranularity:) はメソッド名の通り二つの Date 型が等しいかどうかをチェックするためのメソッドで、第3引数の Calendar.Component でチェックする粒度を指定することができます。今回は .year.month.weekOfYear を設定していますが、この他にも .hour.minute など時間単位で指定することもできます。詳しくはドキュメントを参考にしてみてください🦅

developer.apple.com

ちなみに、同じ日かどうかは下記のように取得することができます。

    func isInSameDay(as date: Date) -> Bool {
        Calendar.current.isDate(self, inSameDayAs: date)
    }

参考

その他の記事

yamato8010.hatenablog.com

yamato8010.hatenablog.com

yamato8010.hatenablog.com