如何检查是否已过去3天

bri*_*one 4 date swift

如何每三天检查一次下载数据?我需要做的就是检查用户打开应用程序时是否已经过去了3天或更长时间,如果是,请等待该应用程序下载一些内容?到目前为止,这是我用于比较日期的内容:

var shouldDownload: Bool = false

extension NSDate: Equatable {}
extension NSDate: Comparable {}

public func ==(lhs: NSDate, rhs: NSDate) -> Bool {
    return lhs.timeIntervalSince1970 == rhs.timeIntervalSince1970
}    

public func <(lhs: NSDate, rhs: NSDate) -> Bool {
    return lhs.timeIntervalSince1970 < rhs.timeIntervalSince1970
}

extension Int {
    var days: NSTimeInterval {
        let DAY_IN_SECONDS = 60 * 60 * 24
        var days:Double = Double(DAY_IN_SECONDS) * Double(self)
        return days
}
let lastChecked = NSDate()

let interval = NSDate(timeInterval: 3.days, sinceDate: lastChecked)
let today = NSDate()

if interval > today {
    shouldDownload = true
}
Run Code Online (Sandbox Code Playgroud)

Max*_*r89 5

您可以使用以下简单功能:

func isPassedMoreThan(days: Int, fromDate date : Date, toDate date2 : Date) -> Bool {
    let unitFlags: Set<Calendar.Component> = [.day]
    let deltaD = Calendar.current.dateComponents( unitFlags, from: date, to: date2).day
    return (deltaD ?? 0 > days)
}
Run Code Online (Sandbox Code Playgroud)


Dun*_*n C 2

我就是这样做的。每次您的应用程序启动或返回前台时,请执行以下操作:

  • 从 NSUserDefaults 读取保存的 NSDate。

  • 计算出从保存的日期到现在已经过去了多少个午夜。(在 Xcode 文档中搜索“Midnights”以查找用于计算 2 个日期之间的天数的 NSCalendar 代码。)

  • 将今天的日期保存到 NSUserDefaults 作为新保存的日期

我将此方法编写为 NSDate 的扩展:

  /**
  This function calcuates an ordinal day number for the receiver 
  using the Gregorian calendar.

  :returns: an integer day number
  */

  func dayNumber() -> Int
  {
    let calendar = DateUtils.gregorianCalendar
    return calendar.ordinalityOfUnit(NSCalendarUnit.CalendarUnitDay,
      inUnit: NSCalendarUnit.CalendarUnitEra, forDate: self)
  }
Run Code Online (Sandbox Code Playgroud)

它使用类 DateUtils 来管理 Gregorian NSCalendar 的单个实例。这让我可以避免为我需要执行的每个日期操作创建一个新的公历实例。

class DateUtils
{
  static let gregorianCalendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!
}
Run Code Online (Sandbox Code Playgroud)