繁体   English   中英

如何检查日期是否至少是前一天?

[英]How to check if date is at least previous day?

大家好,在比较today的日期时,我想得到一个肯定的答案

为此,我使用此 boolean 的Date扩展

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 时区的自定义日历。 您应该将当前日历与当前时区一起使用。 请注意,您可以使用 Calendar 方法 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM