Alexander MacLeod Alexander MacLeod - 4 months ago 20
Swift Question

Calculate minutes between two times without date

I have two times that I would like to calculate the difference in minutes between them. They are as follows:

startDate = "23:51"
endDate = "00:01"


They are both of type
String
as subsequently do not have a date attached with them. I know the common practice would be to convert both to
Date
and then calculate the difference in time using
NSCalendar
:

extension Date {
func minutes(from date: Date) -> Int {
return Calendar.current.components(.minute, from: date, to: self, options: []).minute ?? 0
}
}


However this produces the incorrect result as the days, months, etc. are unknown. How would I accomplish this?

Answer

Here's a pretty basic way to find the difference without using NSDate:

let startDate = "23:51"
let endDate = "00:01"

let startArray = startDate.componentsSeparatedByString(":") // ["23", "51"]
let endArray = endDate.componentsSeparatedByString(":") // ["00", "01"]

let startHours = Int(startArray[0])! * 60 // 1380
let startMinutes = Int(startArray[1])! + startHours // 1431

let endHours = Int(endArray[0])! * 60 // 0
let endMinutes = Int(endArray[1])! + endHours // 1

var timeDifference = endMinutes - startMinutes // -1430

let day = 24 * 60 // 1440

if timeDifference < 0 {
    timeDifference += day // 10
}

And at the end timeDifference equals 10.

This function is assuming that the end date will take place after the start date no matter what. So if the end date is a time that is before the start date it will add 1440 minutes (1 day). It also assumes that the dates are in the format "hh:mm" where the hours range from 0 to 24 and minutes range from 0 to 60.