2015-09-04 9 views
0

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

Вот мой PHP код:

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

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

// Convert secondes to Days, Hours, Minutes, Secondes 
$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 Seconde (ы) для клещей.

Может ли кто-нибудь помочь мне правильно показать работоспособность?

Я уже делать исследования на Google, Stackoverflow и т.д ...

PS: Пожалуйста, скажите мне, если вы не понимаете мой вопрос ... я французский и мой английский не очень хорошо ^^

+0

что такое ожидаемый результат? –

+0

Что-то вроде _20 days_, _4 hours_, _9 minutes_, _3 secondes_ – SatanicGeek

+0

Возможный дубликат [Конвертировать секунды в дни, часы, минуты и секунды] (http://stackoverflow.com/questions/8273804/convert-seconds-into-days -часов-минут-и-секунд) – k1eran

ответ

2

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

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

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

возвращается:

1 ЧАС 72 МИНУТ 38 Seconde

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

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

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

который возвращает:

1 ЧАС 11 МИНУТ 38 Seconde

+1

Heeeeell да! Спасибо, чувак ! Работает. Я получил _2 Heure (s) 4 Минута (ы) 11 Seconde (s) _ для _745128 ticks_ – SatanicGeek

0

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

// 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; 
+0

Я получил _2 Heure (ы) 112 минут (ов) 57 Seconde (s) _ for _671728_ ticks: -/ – SatanicGeek

+0

Работая над решением в JS, а затем переписывая его на PHP, дай мне момент. :) – Jordumus

+0

Я могу сделать что-то вроде '$ sMinutes> = 60? ($ sMinutes> 60? $ sMinutes - 60: $ sMinutes = 0): $ sMinutes) ', но это не очень хороший способ для меня – SatanicGeek