簡體   English   中英

在Swift中以浮動形式獲取兩個日期之間的百分比

[英]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:0008: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.timeIntervalSince1970startdateenddatecurrentdate轉換為毫秒

那應該給你一個介於0和1之間的小數,然后乘以100作為百分比

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM