[英]Get percentage between two dates as a float in Swift
因此,我目前正在嘗試添加一個給定兩個日期的功能,以告訴我距離我有多遠。
TLDR:假設我有一個日期是July 1st, 2017 20:00:00
,另一個是July 2nd, 2017 22:00:00
,今天是July 2nd, 08:00:00
, 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)
}
}
必須有一種方法來划分兩個日期。 但我想不到,我在網上找到的所有內容(使用不同的語言)都需要在兩個日期之間進行划分。
我試圖將所有內容轉換為秒,然后將其除以,但是我不知道如何處理秒將其轉換回DateComponent
因為可能會有5000秒的差異。 任何幫助表示贊賞!
您正在尋找的是Date().timeIntervalSinceReferenceDate
:
let currentInterval = currentDate.timeIntervalSinceReferenceDate
let startInterval = startDate.timeIntervalSinceReferenceDate
let endInterval = endDate.timeIntervalSinceReferenceDate
let progress = ((currentInterval - startInterval) / (endInterval - startInterval)) * 100
這是關於它的蘋果文件。 基本上,它返回從UTC的參考日期2001年1月1日起經過的秒數。
您只需要將日期轉換成數字即可,因為您可以對它們進行加減。
您可以使用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)
或者,使用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
我認為這種方法更好,因為您得到的數學更少:)。
進行完全相同的計算,只需使用yourDate.timeIntervalSince1970
將startdate
, enddate
和currentdate
轉換為毫秒
那應該給你一個介於0和1之間的小數,然后乘以100作為百分比
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.