如何计算 Swift 中两个日期的天数差异,因为天数从 6 a.m 开始。而不是 0

How to calculate the difference in days for two Date in Swift as days start at 6 a.m. instead of 0

我试图找出两个 Date 对象的不同之处。 我基本上知道怎么做了,就是这样:

        let date = Date()
        let dateFormatter = DateFormatter()
        dateFormatter.locale = Locale.current

        print(count)
        // print(history[count - 1].value(forKey: "multipleURLs") as! [String])
        let latestDate = history[count - 1].value(forKey: "date") as! Date
        let calendar = Calendar.current

        let components = calendar.dateComponents([.year, .month, .day, .hour], from: date)

        let nowDate = calendar.startOfDay(for: date)
        let lastDate = calendar.startOfDay(for: latestDate)

        let diffDateComponent = (calendar as NSCalendar).components([NSCalendar.Unit.year, NSCalendar.Unit.month, NSCalendar.Unit.day], from: lastDate, to: nowDate, options: NSCalendar.Options.init(rawValue: 0))

        print("Status Checked" + String(describing: diffDateComponent.day))

但我试图将结果作为从 6 a.m 开始的一天。在早上而不是 0。

所以我做了这样的事情:

        let nowDate = calendar.startOfDay(for: date.addingTimeInterval(-3600))
        let lastDate = calendar.startOfDay(for: latestDate.addingTimeInterval(-3600))

但它似乎不起作用,有人可以帮我解决这个问题吗?

这会将每个日期设置为早上 6 点(在 Date 的当前语言环境中):

import Foundation

// set up dates
let calendar = Calendar.current
let date = Date()
if let latestDate = calendar.date(byAdding: .day, value: -5, to: date) {

  // set each day to 6 AM
  if let nowDate  = calendar.date(bySettingHour: 6, minute: 0, second: 0, of: date      ),
     let lastDate = calendar.date(bySettingHour: 6, minute: 0, second: 0, of: latestDate) {

    print(    date.description(with: .current),
           nowDate.description(with: .current),
          lastDate.description(with: .current),
          separator: "\n")

    // calculate difference in days
    if let days = calendar.dateComponents([.day], from: lastDate, to: nowDate).day {
      print("Days since: \(days)")
    }
  }
}

// Thursday, June 8, 2017 at 7:59:42 AM Eastern Daylight Time
// Thursday, June 8, 2017 at 6:00:00 AM Eastern Daylight Time
// Saturday, June 3, 2017 at 6:00:00 AM Eastern Daylight Time
// Days since: 5

谢谢大佬,我终于弄明白了。以防万一有人需要它,这就是它的完成方式:

        let date = Date()
        let dateFormatter = DateFormatter()
        dateFormatter.locale = Locale.current

        let latestDate = history[count - 1].value(forKey: "date") as! Date
        let calendar = Calendar.current

        let nowDate = calendar.date(byAdding: .hour, value: -6, to: date)
        let lastDate = calendar.date(byAdding: .hour, value: -6, to: latestDate)

        let finalNowDate = calendar.startOfDay(for: nowDate!)
        let finalLastDate = calendar.startOfDay(for: lastDate!)

        let diffDateComponent = calendar.dateComponents([.day], from: finalLastDate, to: finalNowDate)
        print("dif\(diffDateComponent.day)")