Skip to content

Instantly share code, notes, and snippets.

@tbergeron
Last active June 15, 2022 15:09
Show Gist options
  • Save tbergeron/dd27a5fbdd7cf396faa0 to your computer and use it in GitHub Desktop.
Save tbergeron/dd27a5fbdd7cf396faa0 to your computer and use it in GitHub Desktop.
Calculate average time from multiple NSDate in Swift
func getAvgTime(results: Array<NSDate>) -> String {
var totalHours = 0.0
var totalMinutes = 0.0
var avgTime = ""
// sum all hours & minutes together
for result in results {
let hours = Double(NSCalendar.currentCalendar().component(NSCalendarUnit.Hour, fromDate: result))
let minutes = Double(NSCalendar.currentCalendar().component(NSCalendarUnit.Minute, fromDate: result))
totalHours = totalHours + hours
totalMinutes = totalMinutes + minutes
}
// calculate avg hours
let avgHourH : Int = Int(round(totalHours / Double(results.count)))
// calculate avg minutes based on decimals
let avgHourM : Int = Int(round(totalMinutes / Double(results.count)))
// formating output hh:mm:00
avgTime = String(format:"%02d:%02d:00", avgHourH, avgHourM)
return avgTime
}
// example usage
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd hh:mm:ss"
var arrayOfDates : Array<NSDate> = []
var date1 = dateFormatter.dateFromString("2015-08-26 10:30:00")
var date2 = dateFormatter.dateFromString("2015-08-26 9:00:00")
var date3 = dateFormatter.dateFromString("2015-08-26 11:30:00")
var date4 = dateFormatter.dateFromString("2015-08-26 11:15:00")
var date5 = dateFormatter.dateFromString("2015-08-26 9:15:00")
arrayOfDates.append(date1!)
arrayOfDates.append(date2!)
arrayOfDates.append(date3!)
arrayOfDates.append(date4!)
arrayOfDates.append(date5!)
let avgTime = getAvgTime(arrayOfDates) // = 10:18:00
@WillMays1
Copy link

How would I do this for seconds too?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment