How to convert seconds into weeks, days, hours, minutes, and seconds in Swift

1 Answer

0 votes
/*
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

*/

 



answered May 20 by avibootz

Related questions

...