/*
Use integer division and modulo:
1 minute = 60 seconds
1 hour = 60 minutes
1 day = 24 hours
1 week = 7 days
*/
/*
Convert a total number of seconds into weeks, days, hours,
minutes, and seconds. The function receives the total seconds
and returns each component in a struct.
*/
struct TimeParts {
let weeks: Int64
let days: Int64
let hours: Int64
let minutes: Int64
let seconds: Int64
}
func convertSeconds(_ totalSecondsInput: Int64) -> TimeParts {
let SECS_PER_MIN: Int64 = 60
let SECS_PER_HOUR: Int64 = 60 * SECS_PER_MIN
let SECS_PER_DAY: Int64 = 24 * SECS_PER_HOUR
let SECS_PER_WEEK: Int64 = 7 * SECS_PER_DAY
var totalSeconds = totalSecondsInput
// Compute each unit using integer division and modulo
let weeks = totalSeconds / SECS_PER_WEEK
totalSeconds %= SECS_PER_WEEK
let days = totalSeconds / SECS_PER_DAY
totalSeconds %= SECS_PER_DAY
let hours = totalSeconds / SECS_PER_HOUR
totalSeconds %= SECS_PER_HOUR
let minutes = totalSeconds / SECS_PER_MIN
let seconds = totalSeconds % SECS_PER_MIN
return TimeParts(
weeks: weeks,
days: days,
hours: hours,
minutes: minutes,
seconds: seconds
)
}
let seconds: Int64 = 1_000_000
let result = convertSeconds(seconds)
print("\(result.weeks) weeks, " +
"\(result.days) days, " +
"\(result.hours) hours, " +
"\(result.minutes) minutes, " +
"\(result.seconds) seconds")
/*
run:
1 weeks, 4 days, 13 hours, 46 minutes, 40 seconds
*/