【Swift】日付が期間内か識別する方法!switch文で範囲の定義
この記事からわかること
- Swiftで日付が期間内か
識別 する方法 - 日付の範囲を定義するには?
- Date型でswitch文を使用する方法
- containsメソッドの使い方
- サンプル:渡された日付の12星座を返すコード
index
[open]
\ アプリをリリースしました /
友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-
posted withアプリーチ
おすすめ記事:【Swift】Date構造体の使い方!日付の計算や比較方法
Swiftで任意の日付が期間内か識別する方法
Swiftで任意の日付が期間内に該当するかどうかを識別するには以下のようにcontains
メソッドを使用します。
今日の日付が9/30の前後1週間以内か識別
let df = DateFormatter()
let nowDate = Date()
let start = "2022/9/23"
let end = "2022/10/7"
df.dateFormat = "yyyy/MM/dd"
df.locale = Locale(identifier: "ja_JP")
let startDate = df.date(from: start)!
let endDate = df.date(from: end)!
if (startDate...endDate).contains(nowDate) {
print("\(df.string(from:nowDate))は期間内です。")
}
日付操作が可能なDateFormatter
を使用して日付の範囲を定義します。範囲の指定には...
(閉範囲演算子)を使用します。あとはこのレンジに対してメソッドを呼び出せば対象の日付が期間内かどうかを識別することができます。
containsメソッド
func contains(_ output: Self.Output) -> Publishers.Contains<Self>
contains
メソッドは範囲内に引数に渡した値が有ればtrueを返すメソッドです。今回は定義した日付の範囲の中に今日の日付が有れば出力するようにしています。
if (startDate...endDate).contains(nowDate) {
print("\(df.string(from:nowDate))は期間内です。")
}
switch文で日付の範囲を定義する
複数の期間を定義したい場合はswitch
文を使うとコードがスッキリします。
switch
文では条件に範囲を渡すことができるのでここに日付の範囲を渡します。例として渡された日付の12星座を返すコードを作成してみました。
渡された日付の12星座を返す
func signOfZodiac(_ date:Date) -> String {
let df = DateFormatter()
df.dateFormat = "yyyy/MM/dd"
df.locale = Locale(identifier: "ja_JP")
let nowYear = df.string(from: date).prefix(5)
switch date {
case df.date(from: String(nowYear + "3/21"))!...df.date(from: String(nowYear + "4/19"))!:
return "おひつじ座"
case df.date(from: String(nowYear + "4/20"))!...df.date(from: String(nowYear + "5/20"))!:
return "おうし座"
case df.date(from: String(nowYear + "5/21"))!...df.date(from: String(nowYear + "6/21"))!:
return "ふたご座"
case df.date(from: String(nowYear + "6/22"))!...df.date(from: String(nowYear + "7/22"))!:
return "かに座"
case df.date(from: String(nowYear + "7/23"))!...df.date(from: String(nowYear + "8/22"))!:
return "しし座"
case df.date(from: String(nowYear + "8/23"))!...df.date(from: String(nowYear + "9/22"))!:
return "おとめ座"
case df.date(from: String(nowYear + "9/23"))!...df.date(from: String(nowYear + "10/23"))!:
return "てんびん座"
case df.date(from: String(nowYear + "10/24"))!...df.date(from: String(nowYear + "11/22"))!:
return "さそり座"
case df.date(from: String(nowYear + "11/23"))!...df.date(from: String(nowYear + "12/21"))!:
return "いて座"
case df.date(from: String(nowYear + "12/22"))!...df.date(from: String(nowYear + "1/19"))!:
return "やぎ座"
case df.date(from: String(nowYear + "1/20"))!...df.date(from: String(nowYear + "2/18"))!:
return "みずがめ座"
case df.date(from: String(nowYear + "2/19"))!...df.date(from: String(nowYear + "3/20"))!:
return "うお座"
default:
return "..."
}
}
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。
私がSwift UI学習に使用した参考書
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。