Конвертер секунд в минуты и секунды

nui
На сайте с 01.05.2010
Offline
139
nui
1223

Здравствуйте, уважаемые!

Вот такой код:

// convert seconds number to human readable format

function smarty_modifier_SecToMin($seconds)

{

// extract hours

$minResult = floor($seconds/60);

/// if minutes is between 0-9, add a "0" --> 00-09

if($minResult < 10){$minResult = 0 . $minResult;}

/// get sec

$secResult = ($seconds/60 - $minResult)*60;

/// if secondes is between 0-9, add a "0" --> 00-09

if($secResult < 10){$secResult = 0 . $secResult;}

/// return result

return $minResult.":".$secResult;

}

Проблема в отображении если секунд меньше 60.

То есть к примеру полторы минуты нормально 01:30 но если минут нет, то секунды встают на их место. К примеру 30 секунд отображаются 30:00

Как исправить это?

S
На сайте с 23.05.2004
Offline
315
#1

Как вариант


php > print gmdate("H:i:s", 45);
00:00:45
php > print gmdate("H:i:s", 145);
00:02:25
php > print gmdate("H:i:s", 1045);
00:17:25
php >
Это просто подпись.
S
На сайте с 25.11.2008
Offline
124
#2

Вроде как все верно выдает:

вывод:

echo '90: '.smarty_modifier_SecToMin(90).'<br>';

echo '30: '.smarty_modifier_SecToMin(30).'<br>';

выдаст:

90: 01:30

30: 00:30

Бесплатные виджеты для сайта (https://pfka.ru). Технический анализ сайта ( https://linkonavt.ru/services/sitetechnologies ).
K0
На сайте с 01.09.2016
Offline
72
#3

nui, у меня на PHP 5.4.14 выдает правильно, но есть другой косяк - для 130, 190 и 490 секунд выдает лишний нолик:

130 02:010

190 03:010
490 08:010

А дальше бывают вот такие веселые результаты:

960 16:00

961 16:00.99999999999994
962 16:02.0000000000001
963 16:03
964 16:04
965 16:04.9999999999999
966 16:06.0000000000001
967 16:07
968 16:08
969 16:08.9999999999999
970 16:10

И предложу свой вариант функции:

function smarty_modifier_SecToMin($seconds)

{
$minResult = floor($seconds/60);
$secResult = $seconds - $minResult*60;
return sprintf('%02d:%02d', $minResult,$secResult);
}
nui
На сайте с 01.05.2010
Offline
139
nui
#4

kom09, спасибо. Ваша функция так же работает, то есть секунды с минутами меняются.

K0
На сайте с 01.09.2016
Offline
72
#5

nui, ИМХО у вас хулиганит какой-то код за пределами smarty_modifier_SecToMin.

S
На сайте с 30.09.2016
Offline
469
#6
kom09:
А дальше бывают вот такие веселые результаты:

Я вообще с осторожностью отношусь к выражениям, где сначала делают из цифры строку:

$minResult = 0 . $minResult;
а потом пытаются строку вычесть из числа:
$seconds/60 - $minResult
PHP - он, конечно, умный, но с юмором:).
Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.
Samail
На сайте с 10.05.2007
Offline
369
#7
kom09:
961 16:00.99999999999994

/// get sec

$secResult = round(($seconds/60 - $minResult)*60);
К примеру 30 секунд отображаются 30:00

У меня "echo smarty_modifier_SecToMin(30);" 00:30 выводит.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий