【Swift】日付(Date型)同士の差の取り方

つい最近気がついたのですが、My OC Diaryで、日付同士の差分(月)の取り方が間違っててバグっていたので、その正しい取り方をご紹介致します。バグは目下修正中でございます


 

DateComponents

日付(Date型)同士の差分(何日差とか何ヶ月差とか)を取るには、DateComponentsを使います。Calendarオブジェクトにあるメソッドで差分を保持したDateComponentsを取得することが出来ます。例えば、1970年1月1日から現在までの差分を取りたい場合は以下の様に書きます

let now = Date()
let _1970 = Date(timeIntervalSince1970: 0)

// 第1引数は差分を表現する形式を指定します
let dateComponents = Calendar.current.dateComponents([.year, .month, .day, .hour, .minute, .second, .nanosecond], from: _1970, to: now)
print(dateComponents)
// year: 48 month: 0 day: 1 hour: 12 minute: 20 second: 30 nanosecond: 40625976 isLeapMonth: false 

上記の例では1970年1月1日から現在まで、何年何ヶ月何日何時間何分何秒何ナノ秒の差分があったかを取得することが出来ます。この例の場合は48年0ヶ月1日12時間20分30秒40625976ナノ秒になります
 
同じ範囲で何ヶ月差分があったのか、何日差分があったのかを取得したい場合は以下のようにします。

let months = Calendar.current.dateComponents([.month], from: _1970, to: now)
print(months)
// month: 576 isLeapMonth: false
print(months.month)
// 576

let days = Calendar.current.dateComponents([.day], from: _1970, to: now)
print(days)
// day: 17533 isLeapMonth: false
print(days.day)
// 17533

上記の例では576ヶ月の差、17,533日の差があることがわかりました
 

参考サイト

[Swift] 時刻の差分を取得し、いい感じに表示するDate Extension

関連記事

【Ubuntu】UnuntuにSwiftをインストールしてみた件2

【Xcode】ERROR ITMS-90032: "Invalid Image ...

【Objective-C】'void (^ _Nonnull __strong)...

【Mac App】Domain=NSURLErrorDomain Code=-1...

【Swift】UIViewControllerでStatic CellsのTab...

SwiftでOpenALの簡単サンプルソース