如何检查日期是否至少是前一天?
How to check if date is at least previous day?
大家好我想在比较比today
早的日期时得到肯定的答案
为此,我使用 Date
extension 和这个 boolean
extension Date {
var isPreviousDate: Bool {
return self.timeIntervalSinceNow.sign == .minus
}
}
这是我的问题.. 当我打印日期进行比较时,它告诉我今天的日期要早,我不明白为什么
由于遇到问题,我尝试创建一个当前日期并将其与今天的日期进行比较,答案是今天的日期早于今天……这很奇怪,因为它不应该告诉我它更早
这就是我创建 date
进行比较的方式
var calendar = Calendar(identifier: Calendar.current.identifier)
calendar.timeZone = NSTimeZone(name: "UTC")! as TimeZone
guard let selectedDate = calendar.date(from: DateComponents(year: Date().currentYear, month: Date().currentMonth, day: Date().currentDate)) else { return }
print("isPrevious Date :",selectedDate.isPreviousDate)
print(selectedDate)
我是不是做错了什么?
这是我打印创建日期进行比较时在控制台中读取的内容
isPrevious Date: true
2021-02-11 00:00:00 +0000
timeIntervalSinceNow
是一个精度非常高的 FloatingPoint
值,表示自 Date
.
以来经过的秒数
要检查当前日期是否至少在前一天,您可以这样做:
extension Date {
var isAtLeastPreviousDay: Bool {
return isPast && !isToday
}
private var isPast: Bool {
return self < Date()
}
private var isToday: Bool {
return Calendar.current.isDateInToday(self)
}
}
问题在于您使用的是采用 UTC 时区的自定义日历。您应该使用当前时区的当前日历。请注意,您可以使用日历方法 startOfDay 获取特定日期的一天开始时间:
extension Date {
var isPreviousDate: Bool {
timeIntervalSinceNow.sign == .minus
}
var startOfDay: Date {
Calendar.current.startOfDay(for: self)
}
}
let now = Date()
let startOfDay = now.startOfDay
print("isPrevious Date:", startOfDay.isPreviousDate) // true
如果你想检查一个日期是否在昨天,你只需要使用日历方法 isDateInYesterday:
extension Date {
var isDateInYesterday: Bool {
Calendar.current.isDateInYesterday(self)
}
}
Date().isDateInYesterday // false
Date(timeIntervalSinceNow: -3600*24).isDateInYesterday // true
大家好我想在比较比today
为此,我使用 Date
extension 和这个 boolean
extension Date {
var isPreviousDate: Bool {
return self.timeIntervalSinceNow.sign == .minus
}
}
这是我的问题.. 当我打印日期进行比较时,它告诉我今天的日期要早,我不明白为什么
由于遇到问题,我尝试创建一个当前日期并将其与今天的日期进行比较,答案是今天的日期早于今天……这很奇怪,因为它不应该告诉我它更早
这就是我创建 date
进行比较的方式
var calendar = Calendar(identifier: Calendar.current.identifier)
calendar.timeZone = NSTimeZone(name: "UTC")! as TimeZone
guard let selectedDate = calendar.date(from: DateComponents(year: Date().currentYear, month: Date().currentMonth, day: Date().currentDate)) else { return }
print("isPrevious Date :",selectedDate.isPreviousDate)
print(selectedDate)
我是不是做错了什么?
这是我打印创建日期进行比较时在控制台中读取的内容
isPrevious Date: true
2021-02-11 00:00:00 +0000
timeIntervalSinceNow
是一个精度非常高的 FloatingPoint
值,表示自 Date
.
要检查当前日期是否至少在前一天,您可以这样做:
extension Date {
var isAtLeastPreviousDay: Bool {
return isPast && !isToday
}
private var isPast: Bool {
return self < Date()
}
private var isToday: Bool {
return Calendar.current.isDateInToday(self)
}
}
问题在于您使用的是采用 UTC 时区的自定义日历。您应该使用当前时区的当前日历。请注意,您可以使用日历方法 startOfDay 获取特定日期的一天开始时间:
extension Date {
var isPreviousDate: Bool {
timeIntervalSinceNow.sign == .minus
}
var startOfDay: Date {
Calendar.current.startOfDay(for: self)
}
}
let now = Date()
let startOfDay = now.startOfDay
print("isPrevious Date:", startOfDay.isPreviousDate) // true
如果你想检查一个日期是否在昨天,你只需要使用日历方法 isDateInYesterday:
extension Date {
var isDateInYesterday: Bool {
Calendar.current.isDateInYesterday(self)
}
}
Date().isDateInYesterday // false
Date(timeIntervalSinceNow: -3600*24).isDateInYesterday // true