如何获得从选定开始时间到选定结束时间的总时间(以小时和分钟为单位)?
How do I get the total time in hours and minutes from an selected start time to a selected end time?
我已经使用 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) 并返回错误。
然后我尝试了来自 Whosebug 的这段代码:
func differenceBetweenStartAndEndTimes() {
let cal = Calendar.current
let components = cal.dateComponents([.hour], from: endTime, to: startTime)
let diff = components.hour!
}
仍然无法正常工作...我 2 个月前才开始学习如何编码,之前没有任何知识,所以它可能是非常简单的东西,我只是没有考虑!!
我认为您真的想使用日期格式化程序和时间间隔。查看代码中的注释,但您正在努力使变量具有您想要显示的内容。您可以简单地使显示本身按照您想要的方式进行格式化。您只需要保存实际时间间隔。
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,如果您可以使用 hr
而不是 hrs
,那么在 SwiftUI 3 中有很多方便的本机格式化程序
Text("Total: " + (startTime..<endTime).formatted(.components(style: .narrow, fields: [.hour, .minute])))
我已经使用 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) 并返回错误。
然后我尝试了来自 Whosebug 的这段代码:
func differenceBetweenStartAndEndTimes() {
let cal = Calendar.current
let components = cal.dateComponents([.hour], from: endTime, to: startTime)
let diff = components.hour!
}
仍然无法正常工作...我 2 个月前才开始学习如何编码,之前没有任何知识,所以它可能是非常简单的东西,我只是没有考虑!!
我认为您真的想使用日期格式化程序和时间间隔。查看代码中的注释,但您正在努力使变量具有您想要显示的内容。您可以简单地使显示本身按照您想要的方式进行格式化。您只需要保存实际时间间隔。
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,如果您可以使用 hr
而不是 hrs
Text("Total: " + (startTime..<endTime).formatted(.components(style: .narrow, fields: [.hour, .minute])))