【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学習に使用した参考書

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index