计算两个时间段之间的差值



1)。当我发送输入startTimeString = "10:00 pm"endTimeString = "4:00am"时,答案应该是360 minutes

2) 。当我发送输入startTimeString = "10:00 am"endTimeString = "6:00pm"时,答案应该是480 minutes


这是方法,此方法在输入startTimeString = "10:00 pm"endTimeString = "4:00am"时失败

func differenceStartAndEndTime(startTimeString: String?, endTimeString: String?) -> Int {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "hh:mm a"
guard let startTime = dateFormatter.date(from: startTimeString ?? "0:00 am"), let endTime = dateFormatter.date(from: endTimeString ?? "0:00 am") else {
return 0
}
let minutes = Int(endTime.timeIntervalSince(startTime) / 60)
print("Here Is The Hours ~ (minutes/60)")
print("Here Is The Minutes ~ (minutes%60)")
return minutes > 0 ? minutes : 0
}

如注释中所述,只需检查结束日期是否小于开始日期,如果为true,则在结束日期后添加一天。关于时区问题,只需确保将日期格式化程序的默认日期设置为当前日期。除此之外,每次调用此属性时,您的方法都会创建一个新的日期格式化程序。您可以避免将日期格式化程序声明为静态:

extension Formatter {
static let time: DateFormatter = {
let dateFormatter = DateFormatter()
dateFormatter.locale = .init(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "h:mm a"
return dateFormatter
}()
}

func differenceStartAndEndTime(start: String, end: String) -> Int {
Formatter.time.defaultDate = Calendar.current.startOfDay(for: Date())
guard let startTime = Formatter.time.date(from: start),
var endTime = Formatter.time.date(from: end) else {
return 0
}
if endTime < startTime {
endTime = Calendar.current.date(byAdding: .day, value: 1, to: endTime)!
}
let minutes = Int(endTime.timeIntervalSince(startTime) / 60)
print("Here Is The Hours:", minutes / 60)
print("Here Is The Minutes:", minutes % 60)
return minutes
}

differenceStartAndEndTime(start: "2:00 am", end: "6:00 am")  // 240
differenceStartAndEndTime(start: "10:00 pm", end: "4:00 am") // 360
differenceStartAndEndTime(start: "10:00 pm", end: "6:00 am") // 480

这将打印:

这里是小时:4
这里是分钟:0
这是小时:6
下面是分钟:0
后面是小时:8
上面是分钟:0\br>

最新更新