酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

iOSで開始日と終了日から間にある年月日を求める

開始日と終了日だけを渡された状況で、開始日と終了日から間にある年月日を求める方法を紹介します。

f:id:ch3cooh393:20180806102218p:plain

翌日の求め方

指定された日付から翌日(次の日)を求めるにはCalendar#date(byAdding:value:to:)を使います。

let today = Date()
let tomorrow = Calendar.current.date(byAdding: .day, value: 1, to: today)!

開始日と終了日の間にある年月日を取得する

func dates(startDate: Date, endDate: Date) -> [Date] {
    var results = [Date]()
    var date = startDate
    while date <= endDate {
        results.append(date)
        date = Calendar.current.date(byAdding: .day, value: 1, to: date)!
    }
    return results
}

使い方としてはこのような感じになります。date(string:)では文字列からDateオブジェクトを生成していると考えてください。

let startDate = date(string: "2018-08-01")
let endDate = date(string: "2018-08-12")
        
dates(startDate: startDate, endDate: endDate)
       .forEach({ print($0) })