public static function lengthOfTime($seconds, $format = null, array $options = [])
{
$defaults = ['verbose' => true, 'zero' => false, 'separator' => ', ', 'default' => ''];
$options += $defaults;
if (!$options['verbose']) {
$s = ['m' => 'mth', 'd' => 'd', 'h' => 'h', 'i' => 'm', 's' => 's'];
$p = $s;
} else {
$s = ['m' => ' ' . __d('tools', 'Month'), 'd' => ' ' . __d('tools', 'Day'), 'h' => ' ' . __d('tools', 'Hour'), 'i' => ' ' . __d('tools', 'Minute'), 's' => ' ' . __d('tools', 'Second')];
$p = ['m' => ' ' . __d('tools', 'Months'), 'd' => ' ' . __d('tools', 'Days'), 'h' => ' ' . __d('tools', 'Hours'), 'i' => ' ' . __d('tools', 'Minutes'), 's' => ' ' . __d('tools', 'Seconds')];
}
if (!isset($format)) {
if (floor($seconds / DAY) > 0) {
$format = 'Dh';
} elseif (floor($seconds / 3600) > 0) {
$format = 'Hi';
} elseif (floor($seconds / 60) > 0) {
$format = 'Is';
} else {
$format = 'S';
}
}
$ret = '';
$j = 0;
$length = mb_strlen($format);
for ($i = 0; $i < $length; $i++) {
switch (mb_substr($format, $i, 1)) {
case 'D':
$str = floor($seconds / 86400);
break;
case 'd':
$str = floor($seconds / 86400 % 30);
break;
case 'H':
$str = floor($seconds / 3600);
break;
case 'h':
$str = floor($seconds / 3600 % 24);
break;
case 'I':
$str = floor($seconds / 60);
break;
case 'i':
$str = floor($seconds / 60 % 60);
break;
case 'S':
$str = $seconds;
break;
case 's':
$str = floor($seconds % 60);
break;
default:
return '';
}
if ($str > 0 || $j > 0 || $options['zero'] || $i === mb_strlen($format) - 1) {
if ($j > 0) {
$ret .= $options['separator'];
}
$j++;
$x = mb_strtolower(mb_substr($format, $i, 1));
if ($str == 1) {
$ret .= $str . $s[$x];
} else {
$title = $p[$x];
if (!empty($options['plural'])) {
if (mb_substr($title, -1, 1) === 'e') {
$title .= $options['plural'];
}
}
$ret .= $str . $title;
}
}
}
return $ret;
}