日数差を計算する
日数差を計算するには timerIntervalSince を使って差分の秒数を取ればいいです。
1日差だと 24h ですので
24h * 60min * 60sec → 86400sec の差になります。
// 西暦カレンダーを生成
let cal = Calendar( identifier: .gregorian )
// 2000/02/29 12:34:56 の日時を生成
let dtm0 = cal.date(from: DateComponents(
year: 2020,
month: 2,
day: 29,
hour: 12,
minute: 34,
second: 56
))
// 2000/03/01 12:34:56 の日時を生成
let dtm1 = cal.date(from: DateComponents(
year: 2020,
month: 3,
day: 1,
hour: 12,
minute: 34,
second: 56
))
guard let dtm0 = dtm0 else {
print( "Failed to create dtm0" )
throw SomeError.dtm0CreationFailed
}
guard let dtm1 = dtm1 else {
print( "Failed to create dtm1" )
throw SomeError.dtm1CreationFailed
}
// 時間差を取得する(単位は sec).
let dt = dtm1.timeIntervalSince( dtm0 )
// コンソールに出力する.
print( String( format: "time interval is %f sec.", dt ))
enum SomeError: Error {
case dtm0CreationFailed
case dtm1CreationFailed
}
guard で nil チェックしているのは cal.date で日時を生成しているときにありえない日付を指定したりすると nil になるからです。
例えば、うるう年ではないのに 2/29 を指定したり、月がマイナスだったり 13 だったり、日が 32 だったり、秒が 61 だったり、まあいろいろあります。
下記が XCode のコンソール出力です。
time interval is 86400.000000 sec.