次の日曜日を取得する
Calendar - nextDate(after: matching: matchingPolicy: )
サンプルコード
let now: Date = .now
let calendar: Calendar = .current
let sunday = 1
let nextSunday = calendar.nextDate(
after: now, matching: DateComponents(weekday: sunday), matchingPolicy: .nextTime
)
print("now: \(now)") /// now: 2024-04-07 08:24:26 +0000,
print("nextSunday: \(nextSunday!)") /// nextSunday: 2024-04-13 15:00:00 +0000
引数
after: Date
日付探索の基準値を指定。サンプルコードでは Date.now
で今を基準値とした。
matching: DateComponents
日付探索の対象値を指定。サンプルコードでは DateComponents(weekday: 1)
で日曜日を対象値とした。
matchingPolicy: Calendar.MatchingPolicy
日付探索のアルゴリズムを指定。サンプルコードでは Calendar.MatchingPolicy.nextTime
で次に存在する時刻を返すアルゴリズムとした。
次の日曜日午前10時を取得する
Calendar - dateComponents(_: Set < Calendar.Component >, from: Date)
サンプルコード
let now: Date = .now
let calendar: Calendar = .current
let sunday = 1
let nextSunday = calendar.nextDate(
after: now, matching: DateComponents(weekday: sunday), matchingPolicy: .nextTime
)
var _nextSunday10AM = calendar.dateComponents([.year, .month, .day, .hour, .weekday], from: nextSunday!)
_nextSunday10AM.hour = 10
let nextSunday10AM = calendar.date(from: _nextSunday10AM)
print("now: \(now)") /// now: 2024-04-07 09:14:51 +0000
print("nextSunday10AM: \(nextSunday10AM)") /// nextSunday10AM: 2024-04-14 01:00:00 +0000
引数
_: Set < Calendar.Component >
日付変換の単位を指定。サンプルコードでは [.year, .month, .day, .hour, .weekday]
で 年 / 月 / 日 / 時 / 週 を単位とした。
from: Date
日付変換に使う日付を指定。サンプルコードでは nextSunday
で次の日曜日(先ほど計算済)とした。
以下の記事が古かったので最新に書き換えた。