2012-03-11 4 views
1

밀리 초 단위의 시간차를 가져 오려고합니다. PHP DateTime 클래스의 이상한 동작

$_SESSION['startTime'] = time(); 
$to_time = time(); 

//I call the code from here after a delay, say 4 seconds 

$from_time = $_SESSION['startTime']; 
$d1 = new DateTime($from_time); 
$d2 = new DateTime($to_time); 


print_r($d1->diff($d2)); 

나는 4 초 후에 결과를 인쇄하고 결과는 다소 다음과 같이이다 :

DateInterval Object 
(
    [y] => 4 //---- Problem, this value should be + 
    [m] => 0 //         | 
    [d] => 0 //         | 
    [h] => 0 //         |  
    [i] => 0 //         | 
    [s] => 0 //<-here-----------------------------+ 
    [invert] => 1 
    [days] => 1461 
) 

[S]를 4 년 섹션에서 왜 4 있었어야? 내가 뭘 잘못하고 있니?

업데이트 -

$to_time = (microtime(true)); 
$from_time = ($_SESSION['startTime']); 
$diff = $to_time - $from_time; 
print $diff; 

인쇄

3.xxxxxx 
+8

이, 왜 그냥 직접 빼기? 또한 ms 정밀도를 찾고 있다면 microtime()이 필요합니다. – Corbin

답변

3

당신은 서식을 지정해야합니다을 해결. 당신은 그 때문에, 날짜 시간으로 유닉스 타임 스탬프에 보내는 :

$d1 = new DateTime($from_time); 
$d2 = new DateTime($to_time); 

$d1 = new DateTime('@'.$from_time); 
$d2 = new DateTime('@'.$to_time); 

이되는 @ 기호 내가 유닉스 타임 스탬프를 사용하고 날짜 시간을 알려줍니다.

+0

해당 구문에 대해 들어 본 적이 없습니다. 그것도 치명적인 오류를 제공합니다. 어떤 버전의 PHP가 있습니까? 5.3.8을 사용하고 있습니다. –

+0

5.3.10을 사용하고 있습니다. 그것이주는 오류는 무엇입니까? – DanRedux

+0

OK, @ 코빈의 대답이 실제로 내 문제를 해결했습니다. 음, microtime (true)을 사용하고 세션 변수에 저장했습니다. 세션 변수의 값을 '@'기호와 결합하면 오류가 발생했습니다. –

0

은 타임 스탬프가 아닌 매개 변수로 문자열을 허용하므로 "이상한 동작"이 표시됩니다.

당신은 명시 적으로 DateTime 개체를 insantiating 후 타임 스탬프를 설정해야합니다 - 당신은 이미 2 유닉스 타임 스탬프가있는 경우

$from_time = $_SESSION['startTime']; 
$d1 = new DateTime(); 
$d1->setTimestamp($from_time);