我有這個代碼:
extension Date {
/// From today to self
/// - Returns: number of days.
func getDaysUntil() -> Int? {
return Calendar.current.dateComponents([.day], from: Date(), to: self).day
}
}
我需要在 EST 方面考慮一切。所以無論我們在哪個時區,一切都應該被視為EST。
將今天與明天進行比較時,我遇到了問題。
因此,采取以下情況:
Date() //(現在)::6 月 15 日。 自我(比較)::6 月 16 日。
不管今天是什么時候,我想說距離比較日期(自我)還有 1 天。
所以,如果是晚上 11:59 并且比較日期(自我)是上午 12:01,我希望結果是 1 天。如果是上午 12:01,比較日期(自己)是晚上 11:59,我仍然希望比較結果為 1。
事實上,無論我做什么,當我們到達那些極端的邊緣時,日期計算都會以一種或另一種方式偏離 1。
此外,這不僅僅是今天與明天的問題。正確的計數應該是任何日期的結果(考慮今天/明天的難題)。
是否有一些花哨的技巧,或者有沒有人有任何建議我們如何做到這一點?謝謝!
uj5u.com熱心網友回復:
如果您需要默認的“不關心”時間日歷計算,您需要使用中午時間。查看 WWDC session 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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/470816.html