ios - 如何检查两个 NSDate 之间的时间量?

标签 ios swift date swift3

我正在制作一种基于挑战的应用程序,要求用户每天回来。如果有一天他错过了,他就必须重新开始。 我的问题是我的 dateChanged() 函数;第一件事是,它的工作不太可靠,第二件事是我只是检查日期是否更改,因此我不知道使用该应用程序之间是否有一两天。 这是我当前的功能:

public func changeDays()
{
    myFormatter.dateStyle = .short
    myFormatter.locale = Locale(identifier: "de_DE")

    oldDate = defaults.string(forKey: "oldDate")!
    let newDate = Date()
    let newDateString = myFormatter.string(from: newDate)

    if newDateString == oldDate
    {
        NumberOfDaysInARow.text = "\(days) / 30"
    }
    else if newDateString != oldDate
    {
        days += 1
        NumberOfDaysInARow.text = "\(days) / 30"
        defaults.set(days, forKey: "days")
    }

    oldDate = newDateString
    defaults.set(oldDate, forKey: "oldDate")


}

就在今天,当我在 iPhone 上启动应用程序时,它开始出现 fatal error ,但在模拟器中却没有发生......很奇怪。 我必须如何更改我的函数以使其 100% 可靠(并且正常工作),同时还能够检查两个日期之间的时间量?

感谢您的浏览!祝你有美好的一天

最佳答案

您可以使用下面的函数扩展 Date,该函数返回距另一个日期的天数。

extension Date {

  // Returns the amount of days from another date
  func days(from date: Date) -> Int {
    return Calendar.current.dateComponents([.day], from: date, to: self).day ?? 0
  }
}

您可以将其设置为默认日期,而不是将 oldDate 保存为字符串:

defaults.set(Date(), forKey: "oldDate")

您可以使用以下方式从默认值获取旧日期:

let oldDate = defaults.object(forKey:"oldDate") as! Date

一旦你有了旧约会

let dateNow = Date()

let timeDifference = dateNow.days(from: oldDate!)

If timeDifference > 1 {
 // older than 1 day
  } else {
  // Streak still alive 
  }
}

关于ios - 如何检查两个 NSDate 之间的时间量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43126753/

相关文章:

ios - 在 Swift 中子类化 UITextfield 以识别删除/退格键

ios - 与日期字符串分开获取月份和日期

MySQL yearweek() vs week() 返回不同的结果

ios - SKStoreReviewController 不工作

ios - 为什么在进行本地搜索时会收到 MKErrorDomain 错误?

objective-c - 对数组进行排序并保留 Objective-C/swift 中某些元素的原始顺序?

swift - 当我必须在 Swift 中的类、结构和枚举之间进行选择时,我应该如何推理?

java - 在 python 中将 java System.currentTimeMillis() 转换为日期

ios - 如何从 NIB 读取 UITableViewCell(子类)的高度?

arrays - 通过数据库中的字符使用 for 循环创建 UILabel