/*
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 an associative array with each component.
*/
function convertSeconds(int $totalSeconds): array
{
$SECS_PER_MIN = 60;
$SECS_PER_HOUR = 60 * $SECS_PER_MIN;
$SECS_PER_DAY = 24 * $SECS_PER_HOUR;
$SECS_PER_WEEK = 7 * $SECS_PER_DAY;
// Compute each unit using integer division and modulo
$weeks = intdiv($totalSeconds, $SECS_PER_WEEK);
$totalSeconds %= $SECS_PER_WEEK;
$days = intdiv($totalSeconds, $SECS_PER_DAY);
$totalSeconds %= $SECS_PER_DAY;
$hours = intdiv($totalSeconds, $SECS_PER_HOUR);
$totalSeconds %= $SECS_PER_HOUR;
$minutes = intdiv($totalSeconds, $SECS_PER_MIN);
$seconds = $totalSeconds % $SECS_PER_MIN;
return [
'weeks' => $weeks,
'days' => $days,
'hours' => $hours,
'minutes' => $minutes,
'seconds' => $seconds
];
}
$seconds = 1_000_000;
$result = convertSeconds($seconds);
echo $result['weeks'] . " weeks, "
. $result['days'] . " days, "
. $result['hours'] . " hours, "
. $result['minutes'] . " minutes, "
. $result['seconds'] . " seconds\n";
/*
run:
1 weeks, 4 days, 13 hours, 46 minutes, 40 seconds
*/