我正在尝试比较两个日期,一个是来自后端,第二个是当前日期。但这并未显示正确的结果,例如我的第一个日期为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中添加日期,我不知道为什么?
将日期转换为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)
要检查今天以后的日期,请仅使用日期而非时间来检查日期,请使用内置的Date类型而不是字符串并使用Calendar类
let now = Date()
let calendar = Calendar.current
let datesArray = dateRange.filter { calendar.compare($0, to: now, toGranularity: .day) == .orderedDescending}
为了获得最佳结果,应将timeZone
属性设置为传入日期的时区