nonickname
nonickname

Reputation: 301

Check if specific date isToday (or passed) Swift

via dateformatter, how can I write a function to know if a specific date has passed or is today?

example: March 8, 2020

Date()

    if Date() >= 28March2020 {
      return true
    } else {
      return false
    } 

thanks

Upvotes: 1

Views: 1428

Answers (3)

budiDino
budiDino

Reputation: 13527

This simple Date extension should do the trick

extension Date {
    func isToday() -> Bool {
        Calendar.current.startOfDay(for: Date()) == Calendar.current.startOfDay(for: self)
    }
}

And to use it just do something like:

if someDate.isToday() {
    // it is today!
} else {
    // not today
}

Upvotes: 1

Max
Max

Reputation: 173

The easiest way and most flexible is to convert it to seconds and then compare.

let formatter = DateFormatter()
formatter.dateFormat = "YYYY-MM-dd"
let today = Date().timeIntervalSince1970
let date1 = formatter.date(from: "2022-10-01")!.timeIntervalSince1970
let date2 = formatter.date(from: "2022-10-02")!.timeIntervalSince1970
if today >= date1 && today <= date2 {

}

Upvotes: 0

Sweeper
Sweeper

Reputation: 271660

You can do:

if Date() >= Calendar.current.dateWith(year: 2020, month: 3, day: 28) ?? Date.distantFuture {
    return true
} else {
    return false
}

where dateWith(year:month:day:) is defined as:

extension Calendar {
    func dateWith(year: Int, month: Int, day: Int) -> Date? {
        var dateComponents = DateComponents()
        dateComponents.year = year
        dateComponents.month = month
        dateComponents.day = day
        return date(from: dateComponents)
    }
}

This method basically returns the Date with the specified year, month, and day, with the hour, minute, and second components all being 0, that is, start of the specified day. In other words, I am checking whether the instant now is after the start of the day 2020-03-28.

Upvotes: 4

Related Questions