[Swift]日付の比較は、Date型をString型に変更してからすべし

日付の比較をしたときにいつも正しい解が出てこなくて数日はまってしまったので、noteに残しておきます。
問題の解決方法はタイトル通りですが、Date型をString型に変更してからするとのことです。
ちなみに、Swiftでも、日付の比較は、"<"や">"、"=="などでできます。
Date型を変更しないと、例えば今日と任意の日付が同一だったとしても、正しい解答が出てこない。その理由は、Date型で比較してしまうと、たとえ同じ日という出たーを持ってても、何時何分何秒とかが違うので、Swiftでは、違うと判断されるようです。

参考にしたリンク

https://qiita.com/k-yamada-github/items/8b6411959579fd6cd995リンク

参考までに、String型とDate型を相互に変更できる便利なコード

import UIKit

class DateUtils {
    class func dateFromString(string: String, format: String) -> Date {
        let formatter: DateFormatter = DateFormatter()
        formatter.calendar = Calendar(identifier: .gregorian)
        formatter.dateFormat = format
        return formatter.date(from: string)!
    }

    class func stringFromDate(date: Date, format: String) -> String {
        let formatter: DateFormatter = DateFormatter()
        formatter.calendar = Calendar(identifier: .gregorian)
        formatter.dateFormat = format
        return formatter.string(from: date)
    }
}

ただの日付の比較なのに、こんなに悩まされるとは、Swift恐るべし。
ただの日付、されど日付。重要です。
Swiftでは、結構日付の計算や変換、比較などに、手間取ってることに気がつきました。

いいなと思ったら応援しよう!