ここでもNSDateクラスを使うので、わからん人はこっちの記事を読んでからでおなしゃす。
Swiftで1週間後(1週間前)の日付を取得する
1 2 3 4 5 6 |
let now = Date() // Dec 27, 2015, 8:24 PM // 60秒*60分*24時間*7日 = 1週間後の日付 let date1 = Date(timeInterval: 60*60*24*7, since: now) // Jan 3, 2016, 8:24 PM // -60秒*60分*24時間*7日 = 1週間前の日付 let date2 = Date(timeInterval: -60*60*24*7, since: now) // Dec 20, 2015, 8:24 PM |
※timeIntervalは秒数で加算する
Swiftで2つの日付の差を取得する
1 2 3 4 5 6 |
let now = Date() let date1 = Date(timeInterval: 60*60*24*7, since: now) // 1週間後 let date2 = Date(timeInterval: -60*60*24*7, since: now) // 1週間前 let span = date1.timeIntervalSince(date2) // 1209600秒差 let daySpan = span/60/60/24 // 14 (日) |
おまけ: “1970年”と”今”との差
もちろん上の方法でできるけど、今と1970年との差はこんなのがある。
1 2 3 4 |
//1970年からの秒数差 let spanFrom1970 = date1.timeIntervalSince1970 // 1451821326.231374 //今からの秒数差 let spanFromNow = date1.timeIntervalSinceNow // 604799.992963016 |
特定の日付との差とかなら問題ないんだけど、今回みたいなケース(現在基準)では、実行のタイミングがずれる(nowがずれる)ので、小数点がでてきちゃう。連続で実行するとこんな感じ
1 2 3 4 5 |
date1.timeIntervalSinceNow // 604799.9947849512 date1.timeIntervalSinceNow // 604799.9944639802 date1.timeIntervalSinceNow // 604799.9940769672 date1.timeIntervalSince(now) // 604800 |
やってることとしては一番下と同じなんで、今回みたいなミスを減らすために、可読性も大して変わらんし、timeIntervalSince() に統一したほうがミス減る気がする、たぶん。