如何从输入日期开始计算准确的完成天数
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 天完成
我建议您使用 Calendar
和 DateComponents
来获取两个日期之间的正确经过时间。这将迎合闰年和夏令时的变化。
例如
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" 时区;如果不是,则需要进行适当的更改。
如何从给定的输入日期获得准确的完成天数
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 天完成
我建议您使用 Calendar
和 DateComponents
来获取两个日期之间的正确经过时间。这将迎合闰年和夏令时的变化。
例如
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" 时区;如果不是,则需要进行适当的更改。