LoginSignup
16
16

More than 5 years have passed since last update.

[iOS]次の◯曜日を取得。の最も簡単なコード

Last updated at Posted at 2016-03-30

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をいじくって日付を操作して...。というコードばっかり見かけるのですが、このコードを使えば、スッキリして簡単になります。

指摘などあればお願いします。

参考記事

iOS8からの日付(NSDate)操作・比較

謎のAPI

APIのドキュメントも読んだんですがなんとなく使い道がイメージできなかったやつたちです。
使い方も理解するのに時間がかかった。
その1: nextDateAfterDate

次のマッチする日付を探索します。
例えば、次の13日はいつ?というのを調べます。
calendar.nextDateAfterDate(NSDate(), matchingUnit: .DayCalendarUnit, value: 13, >options: NSCalendarOptions.MatchNextTime)

// 今日が12/11だとしたら、12/13がかえってきます。
// 今日が12/14だとしたら、1/13がかえってきます。
うーん何かに使えるのかな。あと、NSCalendarOptionsの詳しい説明がリファレンスに書いてなくて各>値が何を表すのかが分からないです。。カレンダーを探索するときに使えそうな雰囲気ではあるんだが。

16
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
16