如何从输入日期开始计算准确的完成天数

How to get accuracy completion days count from input date

如何从给定的输入日期获得准确的完成天数

  func floatDifferenceDays() -> Double {
    let current = Date()
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
    let   inputDate : String = "2018-07-15 05:46:12"
    let input = dateFormatter.date(from: inputDate)
    var result = current.timeIntervalSince(input!)
    result = result / 86400
    return result
}

它是零。从天 datecomonents.day 到 31 的周期开始,然后递增到月,然后是年。

如何得到不包括年、月的循环发生的天数。

如果给定从当前日期回溯 12 小时的输入日期,它应该 return 0.5 天完成

我建议您使用 CalendarDateComponents 来获取两个日期之间的正确经过时间。这将迎合闰年和夏令时的变化。

例如

let current = Date()
let dateFormatter = DateFormatter()
let calendar = Calendar.autoupdatingCurrent
let timezone = TimeZone.autoupdatingCurrent
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
let inputDate = "2018-07-15 05:46:12"
if let input = dateFormatter.date(from: inputDate) {
    let components = calendar.dateComponents([.day,.hour], from: input, to: current)
    let days = Float(components.day ?? 0)
    let hours = Float(components.hour ?? 0)
    let elapsed = days + hours/24.0
    print("elapsed time is \(elapsed) days")
}

elapsed time is 366.25 days

请注意,此代码假定输入字符串位于 "local" 时区;如果不是,则需要进行适当的更改。