如何从输入日期获取准确性完成天数

时间:2019-07-16 00:49:33

标签: ios swift date nsdateformatter

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

  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,然后递增到Month,接着是Year。

如何获得周期发生的天数,不包括年,月。

如果给定的输入日期比当前日期早12小时,则应返回0.5天完成时间

1 个答案:

答案 0 :(得分:1)

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

例如

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

经过时间为366.25天

请注意,此代码假定输入字符串在“本地”时区中;如果不是,则需要进行适当的更改。