#php #printf
#php #printf
Вопрос:
У меня есть функция времени от секунды до секунды, и я хочу всегда выводить значения минут и секунд в виде двух цифр. Другими словами 5
, стало бы 05
. Я использовал sprintf
в функции, но она ничего не делает. Значения по-прежнему возвращаются в виде однозначных цифр.
//convert seconds to time
function convertSeconds($seconds)
{
// extract hours
$hours = floor($seconds / (60 * 60));
// extract minutes
$divisor_for_minutes = $seconds % (60 * 60);
$minutes = floor($divisor_for_minutes / 60);
// extract the remaining seconds
$divisor_for_seconds = $divisor_for_minutes % 60;
$seconds = ceil($divisor_for_seconds);
// return the final array
$obj = array(
"h" => (int) $hours,
"m" => (int) sprintf("d", $minutes),
"s" => (int) sprintf("d", $seconds)
);
return $obj;
}
Комментарии:
1. Вы должны удалить
(int)
приведение типов, если хотите получить вывод в 2-значном формате
Ответ №1:
это проблема с приведением, вы sprint()
используете переменные not, поэтому попробуйте
$obj = array(
"h" => (int)$hours,
"m" => sprintf("d", (int)$minutes),
"s" => sprintf("d", (int)$seconds)
);
Ответ №2:
sprintf
Функция правильно отформатирует число, если вы удалите приведение к целому числу:
$obj = array(
"h" => (int) $hours,
"m" => sprintf("d", $minutes),
"s" => sprintf("d", $seconds)
);
В десятичном представлении целое число не может начинаться с нуля (только шестнадцатеричные, восьмеричные и двоичные представления целых чисел могут начинаться с нуля).