2013-04-27 5 views
1

인스턴트 메신저로 DateTime에 대한 데이터베이스의 타임 스탬프가있는 온라인/오프라인 함수를 테스트 중입니다.Timestamp가 현재 시간보다 오래된 경우 else 문

하지만 간격 시간을 설정하는 방법을 알아낼 수는 없지만 5 분이라고 말합니다. 5 분 안에 아무 것도하지 않으면 오프라인으로 표시됩니다.

날짜 시간은 데이터베이스 시간보다 항상 커집니다. 문에 간격 시간을 설정하는 방법에 대한 아이디어가 있으십니까? 이 같은

// $user_info['activity'] 2013-04-27 19:27:39 // 

$dateTime = new DateTime("now", new DateTimeZone('Europe/Warsaw')); 
if($user_info['activity']>$dateTime){ 
echo 'user Online'; 
}else{ 
echo 'user inactive'; 
} 

답변

3

뭔가

$now = new DateTime(null, new DateTimeZone('Europe/Warsaw')); 
$last_activity = new DateTime($user_info['activity']); 
$last_activity->modify('+5 minutes'); 

if($now > $last_activity){ 
    echo 'user inactive'; 
}else{ 
    echo 'user online'; 
} 
+0

왜'DateTime :: diff()'를 쓰지 않는가? 그것은 이것을 위해 만들어진 것입니다. – hek2mgl

+0

@john Conde, 그것은 거의 매력처럼 작동하지만, 몇 분 후에 분이 작동하는지 모르겠습니다. 한 시간 이상 비활성 상태 인 +5 명의 사용자가 온라인 상태 인 경우 – Dymond

1

한 가지 가능한 솔루션을 작동 할 수 이것은 내가 지금까지 무엇을 가지고

, 사용 후뿐만 아니라이 될 수있는 DateTime 개체를 데이터베이스 타임 스탬프를 변경하는 것입니다 비교를위한 DateTime::diff() 방법.

$dateTime1 = new DateTime(strtotime($user_info['activity']), new DateTimeZone('Europe/Warsaw')); 
$dateTime2 = new DateTime("now", new DateTimeZone('Europe/Warsaw')); 

$interval = $dateTime1->diff($dateTime2); 

이렇게하면 간격을 결정하고이를 사용하여 비교할 수 있습니다. 이것에 대한

+0

문제는 dateTime이 현재 업데이트 중임을 지원하지 않는다는 것입니다. 하지만 업데이트로 문제가 해결되면 완벽한 해결책처럼 보입니다. – Dymond

1

사용 DateTime::diff() : 이런 내가 최근에 이런 짓을

$now = new DateTime(); 
$activity = $user_info['activity']; 
// get difference between the two dates 
$difference = $now->diff($activity); 

// ->i contains the minutes 
if($difference->i >= 5) { 
    echo "logged out"; 
} 
1

:

$time = time(); 
$last_activity = //time from db 
$time_since = $time - $last_activity 

그런 다음 응용 프로그램에 대한 $time_since 필요한 경우를 정리.