计算日期之间的天数 Swift(考虑明天可能发生的事情。)
Count Days between Dates Swift (Considering what may be tomorrow.)
我有这个代码:
extension Date {
/// From today to self
/// - Returns: number of days.
func getDaysUntil() -> Int? {
return Calendar.current.dateComponents([.day], from: Date(), to: self).day
}
}
我需要根据 EST 考虑一切。所以无论我们在哪个时区,都应视为美国东部标准时间。
我在比较今天和明天时遇到了问题。
所以考虑以下情况:
Date() //(现在)::6 月 15 日。
自己(比较)::6 月 16 日。
不管今天是什么时候,我想说距离比较日期(自己)还有1天。
所以,如果它是 11:59pm 并且比较日期(自身)是 12:01am,我希望结果是 1 天。如果是12:01am,比较日期(self)是11:59pm,我还是希望比较结果是1.
实际上,无论我做什么,当我们到达那些极端边缘时,无论哪种方式,日期计算都会偏离 1。
此外,这 不仅仅是 今天与明天的问题。正确的计数应该是任何日期的结果(考虑 today/tomorrow 难题)。
是否有什么花哨的技巧,或者有人对我们如何实现这一目标有任何建议吗?谢谢!
如果您需要默认的“无关”时间日历计算,您需要使用中午时间。检查 WWDC 会话 227 Solutions to Common Date and Time Challenges。检查“午夜”部分,以及为什么人们不应该使用午夜。
extension Calendar {
static let iso8601 = Calendar(identifier: .iso8601)
}
extension Date {
/// From today's noon to self's noon
/// - Returns: number of days.
var daysFromToday: Int {
Calendar.iso8601.dateComponents([.day], from: Date().noon, to: noon).day!
}
/// Noon time
/// - Returns: same date at noon
var noon: Date {
Calendar.iso8601.date(bySettingHour: 12, minute: 0, second: 0, of: self)!
}
}
用法:
let yesterday = DateComponents(calendar: .iso8601, year: 2022, month: 5, day: 2, hour: 23, minute: 59, second: 59).date!
yesterday.daysFromToday // -1
我有这个代码:
extension Date {
/// From today to self
/// - Returns: number of days.
func getDaysUntil() -> Int? {
return Calendar.current.dateComponents([.day], from: Date(), to: self).day
}
}
我需要根据 EST 考虑一切。所以无论我们在哪个时区,都应视为美国东部标准时间。
我在比较今天和明天时遇到了问题。
所以考虑以下情况:
Date() //(现在)::6 月 15 日。 自己(比较)::6 月 16 日。
不管今天是什么时候,我想说距离比较日期(自己)还有1天。
所以,如果它是 11:59pm 并且比较日期(自身)是 12:01am,我希望结果是 1 天。如果是12:01am,比较日期(self)是11:59pm,我还是希望比较结果是1.
实际上,无论我做什么,当我们到达那些极端边缘时,无论哪种方式,日期计算都会偏离 1。
此外,这 不仅仅是 今天与明天的问题。正确的计数应该是任何日期的结果(考虑 today/tomorrow 难题)。
是否有什么花哨的技巧,或者有人对我们如何实现这一目标有任何建议吗?谢谢!
如果您需要默认的“无关”时间日历计算,您需要使用中午时间。检查 WWDC 会话 227 Solutions to Common Date and Time Challenges。检查“午夜”部分,以及为什么人们不应该使用午夜。
extension Calendar {
static let iso8601 = Calendar(identifier: .iso8601)
}
extension Date {
/// From today's noon to self's noon
/// - Returns: number of days.
var daysFromToday: Int {
Calendar.iso8601.dateComponents([.day], from: Date().noon, to: noon).day!
}
/// Noon time
/// - Returns: same date at noon
var noon: Date {
Calendar.iso8601.date(bySettingHour: 12, minute: 0, second: 0, of: self)!
}
}
用法:
let yesterday = DateComponents(calendar: .iso8601, year: 2022, month: 5, day: 2, hour: 23, minute: 59, second: 59).date!
yesterday.daysFromToday // -1