iOS
カレンダー
calendar
Swift
DateIntervalFormatter

【Swift】DateIntervalFormatterで日付や時刻の範囲を出力する

前回の記事ではDateFormatterを使った日付の出力について説明しました。

日時の範囲を表示する

例えば「2018年5月10日〜5月20日」「午前10時〜午前11時」のように日付や時刻の範囲を表示する場合には、DateIntervalFormatterを使います。

let date1 = Date()
let date2 = date1.addingTimeInterval(3600*24)

let formatter = DateIntervalFormatter()
formatter.dateStyle = .medium
formatter.timeStyle = .short

print(formatter.string(from: date1, to: date2))

// 出力:Jun 24, 2018, 8:20 PM – Jun 25, 2018, 8:20 PM(英語の場合)
// 出力:2018/06/24 20:20~2018/06/25 20:20(日本語の場合)

dateTemplateを使うとより細かく日付や時刻を指定できます。

let date1 = Date()
let date2 = Calendar.current.move(date1, byDays:30)

let formatter = DateIntervalFormatter()
formatter.dateTemplate = "yMMMd"

print(formatter.string(from: date1, to: date2))

// Jun 24 – Jul 24, 2018
// 2018年6月24日~7月24日

上記のように日付のみの範囲を表示する場合、同じ年であれば2018年は1度しか表示されない、など気の利いた表示をしてくれます。またシステム設定で和暦を指定している場合は、「2018年」の代わりに「平成30年」と表示されます。

また以下のように月が同じ場合は6月が1度しか表示されず、短くて分かりやすい表示になっています。

let date1 = Date()
let date2 = Calendar.current.move(date1, byDays:3)

let formatter = DateIntervalFormatter()
formatter.dateTemplate = "yMMMd"

print(formatter.string(from: date1, to: date2))

// Jun 24 – 27, 2018
// 2018年6月24日~27日

以下のようにして時刻のみの出力も可能です。

let date1 = Date()
let date2 = date1.addingTimeInterval(3600)

let formatter = DateIntervalFormatter()
formatter.dateTemplate = "jm"

print(formatter.string(from: date1, to: date2))

// 8:20 PM – 9:20 PM(英語)
// 20:20~21:20(日本語)

システム設定で12時間表示を指定している場合は、「午後8時20分~午後9時20分」と表示されます。