快速比较两个日期的问题

问题描述 投票:1回答:2

我正在尝试比较两个日期,一个是来自后端,第二个是当前日期。但这并未显示正确的结果,例如我的第一个日期为Jan 26, 2020而当前为Jan 27,2020,因此不应在我的数组中添加第一个日期。我只想要那些比当前日期高的日期。我的比较代码是这样,

for date in dateRange
{
    let availableDate = dateFormatter.string(from: date as Date)
    //self.datesArray.append(availableDate + " | \(dateTime.startTime ?? "") - \(dateTime.endTime ?? "")")
    let dates = Date()
    let formatter = DateFormatter()
    formatter.dateFormat = "EEEE, MMM d, yyyy"
    let results = formatter.string(from: dates)
    if availableDate <= results
    {
        print("Past Date")
    }
    else
    {
        print(availableDate)
        print(results)
        self.datesArray.append(availableDate)
    }
}

每次迭代都会在dateArray中添加日期,我不知道为什么?

swift date
2个回答
2
投票

将日期转换为String并进行比较是一个很糟糕的主意。

此外,字符串格式还是不可比的(例如Feb小于Jan

比较日期

for date in dateRange {            
   let now = Date()
   if date <= now {
       print("Past Date")
   } else {
       print(date)
       print(now)
       self.datesArray.append(date) // declare datesArray as [Date]
   }
}

或更简单

let filteredDates = dateRange.filter{ $0 > Date() }
self.datesArray.append(contentsOf: filteredDates)

0
投票

要检查今天以后的日期,请仅使用日期而非时间来检查日期,请使用内置的Date类型而不是字符串并使用Calendar类

let now = Date()
let calendar = Calendar.current
let datesArray = dateRange.filter { calendar.compare($0, to: now, toGranularity: .day) == .orderedDescending} 

为了获得最佳结果,应将timeZone属性设置为传入日期的时区

© www.soinside.com 2019 - 2024. All rights reserved.