如何检查是否过了3天

时间:2015-05-07 18:52:45

标签: swift date

如何检查每3天下载一些数据?我需要做的就是检查用户打开应用程序是否已经过了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
}

3 个答案:

答案 0 :(得分:4)

您可以使用这个简单的功能:

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)
}

答案 1 :(得分:2)

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

  • 从NSUserDefaults中读取已保存的NSDate。

  • 计算已保存的中午数 直到现在。 (在&#34; Midnights&#34;的Xcode文档中进行搜索以查找 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)
  }

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

class DateUtils
{
  static let gregorianCalendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!
}

答案 2 :(得分:0)

Swift 4版本:

ng generate component