Skip to content

Instantly share code, notes, and snippets.

@windbridges
Last active December 3, 2020 17:32
Show Gist options
  • Save windbridges/e8454519e0a8c2b4c0c6532e37d8166f to your computer and use it in GitHub Desktop.
Save windbridges/e8454519e0a8c2b4c0c6532e37d8166f to your computer and use it in GitHub Desktop.
Human readable interval formatter trait
<?php
trait WithIntervalFormatter
{
private function formatInterval($seconds, $day_lbl = 'd', $hour_lbl = 'h', $minute_lbl = 'm', $second_lbl = 's', $skip_zero = false)
{
$secondsInAMinute = 60;
$secondsInAnHour = 60 * $secondsInAMinute;
$secondsInADay = 24 * $secondsInAnHour;
// extract days
$days = floor($seconds / $secondsInADay);
// extract hours
$hourSeconds = $seconds % $secondsInADay;
$hours = floor($hourSeconds / $secondsInAnHour);
// extract minutes
$minuteSeconds = $hourSeconds % $secondsInAnHour;
$minutes = floor($minuteSeconds / $secondsInAMinute);
// extract the remaining seconds
$remainingSeconds = $minuteSeconds % $secondsInAMinute;
$seconds = ceil($remainingSeconds);
$ret = [];
if ($skip_zero) {
if ($days) {
$ret[] = $days . $day_lbl;
}
if ($hours) {
$ret[] = $hours . $hour_lbl;
}
if ($minutes) {
$ret[] = $minutes . $minute_lbl;
}
if ($seconds || !$ret) {
$ret[] = $seconds . $second_lbl;
}
} else {
if ($days) {
$ret[] = $days . $day_lbl;
}
if ($hours || $days) {
$ret[] = $hours . $hour_lbl;
}
if ($minutes || $hours || $days) {
$ret[] = $minutes . $minute_lbl;
}
$ret[] = $seconds . $second_lbl;
}
return join(' ', $ret);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment