Показывать тики в днях, часах, минутах и ​​секундах

Я пытаюсь показать UpTime в днях, часах, минутах, секундах. Что-то вроде 20 дней, 4 часа, 9 минут, 3 секунды

Вот мой PHP-код:

// Get uptime with my SNMP class
$iTicks = $oHardwareMonitoring->fGetSystemUpTime();

// Convert Ticks to seconds
$iSecondes = $iTicks / 100;

// Convert seconds to Days, Hours, Minutes, Seconds
$sSecondes = gmdate('s', $iSecondes);
$sMinutes  = ($sSecondes > 60 ? round(($sSecondes / 60), 0) : null);
$sHeures   = ($sMinutes > 60 ? round(($sMinutes / 60), 0) : null);
$sJours    = ($sHeures > 24 ? round(($sHeures / 24), 0) : null);

// Show the result
echo '<b>'.$sInfosUptime.'</b> : '.
($sJours != null ? $sJours.' '.DAY.' ' : null).
($sHeures != null ? $sHeures.' '.HOUR.' ' : null).
($sMinutes != null ? $sMinutes.' '.MINUTE.' ' : null).
$sSecondes.' '.SECONDE;

Когда я выполняю PHP, я получаю 38 секунд за 429859 тиков.

Как правильно показывать аптайм?


person SatanicGeek    schedule 04.09.2015    source источник
comment
Каков ожидаемый результат?   -  person ɹɐqʞɐ zoɹǝɟ    schedule 04.09.2015
comment
Что-то вроде 20 дней, 4 часа, 9 минут, 3 секунды   -  person SatanicGeek    schedule 04.09.2015
comment
возможный дубликат Преобразование секунд в дни, часы, минуты и секунды   -  person k1eran    schedule 04.09.2015


Ответы (2)


$sSecondes никогда не может быть больше 60, потому что вы используете gmdate('s', $iSecondes);, который возвращает значение от 00 до 59. Поэтому последующие условия никогда не будут оцениваться как true.

Используя следующую строку:

$sMinutes = ($iSecondes > 60 ? round(($iSecondes / 60), 0) : null);

возвращает:

1 ЧАС 72 МИНУТЫ 38 СЕКУНД

Лучше, но не совсем то, что ожидалось.

Мы можем получить правильное количество каждой единицы, используя модуль, деление и floor():

$sSecondes = $iSecondes%60;
$sMinutes  = floor($iSecondes%3600/60);
$sHeures   = floor($iSecondes%86400/3600);
$sJours    = floor($iSecondes/86400);

Что возвращает:

1 ЧАС 11 МИНУТ 38 СЕКУНД

person spenibus    schedule 04.09.2015
comment
Хеееееее да! Спасибо, чувак ! Это работает. Я получил 2 Heure(s) 4 Minute(s) 11 Seconde(s) за 745128 тиков - person SatanicGeek; 04.09.2015

Из головы - не смог проверить код, так как у меня нет доступного веб-сервера сразу:

// Get uptime with my SNMP class
$iTicks = $oHardwareMonitoring->fGetSystemUpTime();

// Convert Ticks to secondes
$iSecondes = $iTicks / 100;

// Convert secondes to Days, Hours, Minutes, Secondes
$sSecondes = $iSecondes % 60;
$sMinutes = round($iSecondes / 60,0);
$sHeures = round($sMinutes / 60,0);
$sJours = round($sHeures / 24,0);



// Show the result
echo '<b>'.$sInfosUptime.'</b> : '.
($sJours != 0 ? $sJours.' '.DAY.' ' : null).
($sHeures != 0 ? $sHeures.' '.HOUR.' ' : null).
($sMinutes != 0 ? $sMinutes.' '.MINUTE.' ' : null).
$sSecondes.' '.SECONDE;
person Jordumus    schedule 04.09.2015
comment
Я получил 2 Heure(s) 112 Minute(s) 57 Seconde(s) за 671728 тиков :-/ - person SatanicGeek; 04.09.2015
comment
Работая над решением на JS, а затем переписывая его на PHP, дайте мне минутку. :) - person Jordumus; 04.09.2015
comment
Я могу сделать что-то вроде $sMinutes >= 60 ? ($sMinutes > 60 ? $sMinutes - 60 : $sMinutes = 0) : $sMinutes), но мне это не подходит - person SatanicGeek; 04.09.2015
comment
Хорошо, но мне нужно использовать vars, чтобы показать правильный текст. Я хочу показать дни, минуты и т. д. ... на французском, английском и т. д. ... мы должны обратить на это внимание - person SatanicGeek; 04.09.2015