2011-01-23 5 views
1

제 친구와 저는 IRC Bot을위한 꽤 기본적인 가동 시간 스크립트를 만들고 있습니다. 여기 경과 된 시간을 반환하는 방법은 무엇입니까?

는 우리의 코드입니다 : 스크립트가 시간으로, 실행될 때

function Uptime() 
{ 
    global $uptimeStart; 
    $currentTime = time(); 
    $uptime = $currentTime - $uptimeStart; 
    $this->sendIRC("PRIVMSG {$this->ircChannel} :Uptime: ".date("z",$uptime)." Day(s) - ".date("H:i:s",$uptime)); 
} 

$ uptimeStart 즉시 설정();

이 기능을 실행하면 어떤 이유로 364 일과 19 시간에 시작됩니다. 나는 이유를 알 수 없다.

어떤 도움이 필요합니까?

+0

1. 함수 인수 으로 변수를 전달하지 마십시오. 2. var_dump ($ currentTime, $ uptimeStart) 3. differnce 사용을 계산하려면 'date()'가 아닌 간단한 수학. – zerkms

답변

4

$uptimedate()에 사용해야하는 타임 스탬프가 아니지만 시간 차이가 있습니다. 실제 시간과 일치하는 시간 (초)이 없습니다.

cacluate (빠른 것, 1 일, 2 시간 등의 일을 할 때 여분의 두뇌를 넣으십시오);)

$minutes = $uptime/60; 
$hours = $minuts/60 ; 
$days = $hours/24 

1

당신은 그 시간 차이에 date()를 호출하여 meaninful 아무것도받지 않습니다. 당신은 그 시간차를 가져야하고 점차적으로 초로 측정 된 년, 월, 일, 시간으로 나누어야합니다. 그런 식으로 당신은 그 용어의 시차를 알 수 있습니다.

$daySeconds = 86400 ; 
$monthSeconds = 86400 * 30 ; 
$yearSeconds = 86400 * 365 ; 

$years = $uptime/$yearSeconds ; 
$yearsRemaining = $uptime % $yearSeconds ; 

$months = $yearsRemaining/$monthSeconds ; 
$monthsRemaining = $yearsRemaining % $monthSeconds ; 

$days = $monthsRemaining/$daySeconds ; 

.. 시간과 분을 얻기 위해.

2

위 5.3 이상이 경우, 날짜 시간 및 DateInterval 클래스를 사용 :

$uptimeStart = new DateTime(); //at the beginning of your script 

function Uptime() { 
    global $uptimeStart; 
    $end = new DateTime(); 

    $diff = $uptimeStart->diff($end); 

    return $diff->format("%a days %H:%i:%s"); 
} 
실제로 돌아갑니다 0으로 설정된 두 번째 인수를
0

날짜() 함수 (제로 날짜 + (시간대)) 여기서 "zero-date"는 "00:00:00 1970-01-01"입니다. 시간대가 UTC-5 인 것처럼 보이므로 (365 일 24 시간) - (5 시간) = (364 일 19 시간)

또한 date() 함수는 다음과 같은 차이점을 표시하는 가장 좋은 방법은 아닙니다. 두 날짜. 다른 답변을보십시오 - 이미 년 사이의 차이를 계산하는 좋은 방법이 게시되어 있습니다

관련 문제