如何从给定的输入日期获取准确性完成天数
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天完成时间
答案 0 :(得分:1)
我建议您使用Calendar
和DateComponents
获取两个日期之间的正确经过时间。这将满足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天
请注意,此代码假定输入字符串在“本地”时区中;如果不是,则需要进行适当的更改。