所以我目前正在尝试添加一个功能,给定两个日期,它会告诉我我已经走了多远。
TLDR:
所以,假设我有一个日期 是 ,July 1st, 2017 20:00:00
另一个日期是July 2nd, 2017 22:00:00
,今天是July 2nd, 08:00:00
,那么我将得到我已完成 46.17% 的结果。
我尝试这样做的方法是使用一个简单的公式:
进度=(当前时间-开始时间)/(结束时间-开始时间)
但是当放入代码中时,我可以减去两个日期,并得到差值DateComponent
,但我不能除以两个DateComponent
。这是我设置的代码,扩展名为 t
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
let startDate = formatter.date(from: "2017-07-01 20:00:00")
let endDate = formatter.date(from: "2017-07-02 22:00:00")
let currentDate = formatter.date(from: "2017-07-01 08:00:00")
let progress = (currentDate - startDate) / (endDate - startDate)
extension Date {
static func - (date1: Date, date2: Date) -> DateComponents {
let calender:Calendar = Calendar.current
return calender.dateComponents([.year, .month, .day, .hour, .minute, .second], from: date1, to: date2)
}
}
Run Code Online (Sandbox Code Playgroud)
必须有一种方法来划分两个日期。但我想不到,我在网上找到的所有内容(使用不同的语言)都需要两个日期之间的划分。
我尝试将所有内容转换为秒,然后将其除以秒,但我不知道如何将秒转换回 a,DateComponent
因为可能存在 5000 秒的差异。任何帮助表示赞赏!
您只需将日期转换为数字,因为这样您就可以对它们进行加法和减法。
您可以使用 将timeIntervalSince1970
日期转换为数字,然后您可以使用您的公式:
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
let startDate = formatter.date(from: "2017-07-01 20:00:00")!.timeIntervalSince1970
let endDate = formatter.date(from: "2017-07-02 22:00:00")!.timeIntervalSince1970
let currentDate = formatter.date(from: "2017-07-02 08:00:00")!.timeIntervalSince1970
let percentage = (currentDate - startDate) / (endDate - startDate)
Run Code Online (Sandbox Code Playgroud)
或者,使用timeIntervalSince(_:)
:
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
let startDate = formatter.date(from: "2017-07-01 20:00:00")!
let duration = formatter.date(from: "2017-07-02 22:00:00")!.timeIntervalSince(startDate)
let elapsed = formatter.date(from: "2017-07-02 08:00:00")!.timeIntervalSince(startDate)
let percentage = elapsed / duration
Run Code Online (Sandbox Code Playgroud)
我认为这种方式更好,因为你得到的数学知识更少:)。
归档时间: |
|
查看次数: |
1853 次 |
最近记录: |