如何获取从选定开始时间到选定结束时间的总时间(以小时和分钟为单位)



我用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!
}

仍然无法使其工作。。。两个月前,我刚开始学习如何在没有任何知识的情况下进行编码,所以这可能是一件超级简单的事情,我只是没有想过!!

我认为您确实希望使用日期格式化程序和时间间隔。请参阅代码中的注释,但您正在努力使变量具有您想要显示的内容。您可以简单地使显示器本身按照您想要的方式进行格式化。您只需要保存实际的时间间隔。

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) ?? "")
}
}
}

这是SwiftUI,在SwiftUI 3中,如果您可以使用hr而不是hrs,那么有很多方便的本地格式化程序

Text("Total: " + (startTime..<endTime).formatted(.components(style: .narrow, fields: [.hour, .minute])))

最新更新