Изучение различных способов сравнения дат в Swift: один и тот же день?

Метод 1: сравнение календарей
Один простой способ сравнить даты — использовать класс Calendarв Swift. Мы можем извлечь необходимые компоненты (год, месяц и день) из обеих дат и сравнить их.

func isSameDay(_ date1: Date, _ date2: Date) -> Bool {
    let calendar = Calendar.current
    let components1 = calendar.dateComponents([.year, .month, .day], from: date1)
    let components2 = calendar.dateComponents([.year, .month, .day], from: date2)

    return components1.year == components2.year && components1.month == components2.month && components1.day == components2.day
}

Метод 2: форматирование даты
Другой подход — использовать DateFormatterдля форматирования обеих дат в строки, представляющие только день. Затем мы можем сравнить эти строки на предмет равенства.

func isSameDay(_ date1: Date, _ date2: Date) -> Bool {
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd"

    let dateString1 = dateFormatter.string(from: date1)
    let dateString2 = dateFormatter.string(from: date2)

    return dateString1 == dateString2
}

Метод 3: компоненты даты
Swift предоставляет класс DateComponents, который позволяет нам извлекать определенные компоненты из даты. Мы можем извлечь компоненты года, месяца и дня и сравнить их напрямую.

func isSameDay(_ date1: Date, _ date2: Date) -> Bool {
    let calendar = Calendar.current
    let dateComponents1 = calendar.dateComponents([.year, .month, .day], from: date1)
    let dateComponents2 = calendar.dateComponents([.year, .month, .day], from: date2)

    return dateComponents1 == dateComponents2
}

Метод 4: сравнение временных интервалов
Если вы хотите сравнить даты без учета временного компонента, вы можете преобразовать обе даты в соответствующие временные интервалы, начиная с базовой даты (например, 1 января 2001 г.) и сравнить интервалы..

func isSameDay(_ date1: Date, _ date2: Date) -> Bool {
    let calendar = Calendar.current
    let referenceDate = calendar.date(from: DateComponents(year: 2001, month: 1, day: 1))!

    let interval1 = date1.timeIntervalSince(referenceDate)
    let interval2 = date2.timeIntervalSince(referenceDate)

    return Int(interval1) == Int(interval2)
}

В этой статье мы рассмотрели различные методы сравнения дат и определения того, представляют ли они один и тот же день в Swift. Мы рассмотрели подходы с использованием сравнений Calendar, DateFormatter, DateComponentsи временных интервалов. В зависимости от ваших конкретных требований вы можете выбрать метод, который лучше всего соответствует вашим потребностям. Не стесняйтесь экспериментировать с этими методами и адаптировать их к своим проектам.