LoginSignup
1
4

次のX曜日のY時を取得。の最もシンプルなコード #Swift

Posted at

次の日曜日を取得する

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 で次の日曜日(先ほど計算済)とした。


以下の記事が古かったので最新に書き換えた。

1
4
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
1
4