我用 DatePickers 為 startTime 和 EndTime 創建了一個 swiftui 表單。我想顯示總數并將其從空字串更新為小時和分鐘(例如 10 小時 30 分鐘)。
@State private var startTime = Date()
@State private var endTime = Date()
@State private var totalTime = differenceBetweenStartAndEndTimes
Form {
DatePicker("Start Time", selection: $startTime, displayedComponents: .hourAndMinute)
DatePicker("End Time", selection: $endTime, displayedComponents: .hourAndMinute)
Text("Total: \(totalTime)")
}
我嘗試使用 Date().offset(from: endTime, to: startTime) 并回傳錯誤。
然后我從stackOverflow嘗試了這段代碼:
func differenceBetweenStartAndEndTimes() {
let cal = Calendar.current
let components = cal.dateComponents([.hour], from: endTime, to: startTime)
let diff = components.hour!
}
仍然無法讓它作業......我兩個月前才開始學習如何在沒有任何先前知識的情況下編碼,所以這可能是我沒有想到的超級簡單的事情!
uj5u.com熱心網友回復:
我認為您真的想使用日期格式化程式和時間間隔。請參閱代碼中的注釋,但您正在努力使變數具有您想要顯示的內容。您可以簡單地使顯示幕本身按照您想要的方式對其進行格式化。您需要保存的只是實際的時間間隔。
struct DateDifferences: View {
@State private var startTime = Date()
@State private var endTime = Date()
var totalTime: TimeInterval {
// This provides a time interval (difference between 2 dates in seconds as a Double
endTime.timeIntervalSince(startTime)
}
// The DateComponentsFormatter handles how that time interval is displayed
var dateFormatter: DateComponentsFormatter {
let df = DateComponentsFormatter()
// Limits the display to hours and mintues
df.allowedUnits = [.hour, .minute]
// Adds short units to hour and minutes as hr & min
df.unitsStyle = .short
return df
}
var body: some View {
Form {
DatePicker("Start Time", selection: $startTime, displayedComponents: .hourAndMinute)
DatePicker("End Time", selection: $endTime, displayedComponents: .hourAndMinute)
Text("Total: \(totalTime)")
Text(dateFormatter.string(from: totalTime) ?? "")
}
}
}
uj5u.com熱心網友回復:
這是 SwiftUI,在 SwiftUI 3 中有很多方便的原生格式化程式,如果你可以使用hr而不是hrs
Text("Total: " (startTime..<endTime).formatted(.components(style: .narrow, fields: [.hour, .minute])))
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/447627.html
