NSCalendar
- nextDateAfterDate:matchingUnit:value:options:
サンプルコード
let mondayNumber = 2
let calendar = NSCalendar(identifier: NSCalendarIdentifierGregorian)
//これ!
let nextDate = calendar?.nextDateAfterDate(NSDate(), matchingUnit: NSCalendarUnit.Weekday, value: mondayNumber, options: NSCalendarOptions.MatchNextTime)
let todaysComponents = calendar?.components([.Month, .Day, .Weekday], fromDate: NSDate())
let nextDateComponents = calendar!.components([.Month, .Day, .Weekday], fromDate: nextDate!)
print("[today]","Month:",todaysComponents?.month, "Day:",todaysComponents?.day,"Weekday:",calendar?.weekdaySymbols[(todaysComponents?.weekday)! - 1])
print("[nextDate]","Month:", nextDateComponents.month, "Day:", nextDateComponents.day,"Weekday:", calendar?.weekdaySymbols[(nextDateComponents.weekday) - 1])
結果
[today] Month: Optional(3) Day: Optional(31) Weekday: Optional("Thu")
[nextDate] Month: 4 Day: 4 Weekday: Optional("Mon")
引数
- nextDateAfterDate(date: NSDate
- "どの日基準で◯曜日か"の指定。サンプルはNSDate()で今日基準
- matchingUnit: NSCalendarUnit
- 何の要素で探すかという値。.Weekdayで曜日を指定
- value: Int
- 検索数値。曜日の場合、日曜日1,月曜日2...土曜日:7となる。サンプルは月曜で検索
- options: NSCalendarOptions
- 検索オプション。次の〇〇の場合は、.MatchNextTimeを使う
ネットの記事を見回っているとNSDateComponentsをいじくって日付を操作して...。というコードばっかり見かけるのですが、このコードを使えば、スッキリして簡単になります。
指摘などあればお願いします。
参考記事
謎のAPI
APIのドキュメントも読んだんですがなんとなく使い道がイメージできなかったやつたちです。
使い方も理解するのに時間がかかった。
その1: nextDateAfterDate次のマッチする日付を探索します。
例えば、次の13日はいつ?というのを調べます。
calendar.nextDateAfterDate(NSDate(), matchingUnit: .DayCalendarUnit, value: 13, >options: NSCalendarOptions.MatchNextTime)// 今日が12/11だとしたら、12/13がかえってきます。
// 今日が12/14だとしたら、1/13がかえってきます。
うーん何かに使えるのかな。あと、NSCalendarOptionsの詳しい説明がリファレンスに書いてなくて各>値が何を表すのかが分からないです。。カレンダーを探索するときに使えそうな雰囲気ではあるんだが。