【Swift】Date型で同じ年、月、週かどうかを取得できるようにする
今回はタイトルの通り Swift
の Date
型で、2つの Date
が同じ年、月、週かどうかを取得する方法を紹介したいと思います🏃🏻♂️
方法
とりあえずコードは下記のようになります。今回は Date
の Extension
として定義しています。
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
など時間単位で指定することもできます。詳しくはドキュメントを参考にしてみてください🦅
ちなみに、同じ日かどうかは下記のように取得することができます。
func isInSameDay(as date: Date) -> Bool { Calendar.current.isDate(self, inSameDayAs: date) }
参考
- https://stackoverflow.com/questions/43663622/is-a-date-in-same-week-month-year-of-another-date-in-swift/43664156#43664156
- https://developer.apple.com/documentation/foundation/calendar/2292870-isdate
- https://developer.apple.com/documentation/foundation/calendar/component