2014-05-22 4 views
3

나는이 한 가지 문제, 즉 같은 것을 만들려고 노력 메신저 :날짜/시간 비교 PHP/MySQL?

경우 - (false)를 (날짜 시스템 날짜> 15 분)

경우 (날짜 - 시스템 날짜 < = 15 분) (참)

하지만 완전히 손실되었습니다. PHP로 작업하는 법을 모르겠습니다.

Im 내가 데이터베이스에서 해당 datetime을 선택하고 해당 datetime이 내 서버의 마지막 15 분 사이에 있는지, 내 DB가 MySQL인지 확인할 것인지 묻습니다.

희망을 이해하십시오! 감사!


마지막으로 내가 그것을 감사 Sammitch 할 수 있도록하고, 다른 사람들은 여기에 내가 코드 조각 떠나 : 날짜가 MySQL을 이미있는 경우

$now = time(); 
    $target = strtotime($row[1]); 
    $diff = $now - $target; 

    //15 minuts 15*60 = 900 
    if ($diff <= 900) { 
     $seconds = $diff; 
    } else { 
$seconds = $diff;  
} 
+0

'NOW SELECT 시도'? –

+0

PHP : ['DateTime :: diff()'] (http://ca1.php.net/manual/en/datetime.diff.php) MySQL : ['DATE_SUB()'] (http : // dev. – Sammitch

+2

"** Related **"아래 오른쪽에 링크가 여러 개 있습니다 (* 관련 *). 어떤 도움이 될지도 모른다. –

답변

16

하는 쿼리 때문에의 비교를 수행 할 것 :

  1. MySQL에는 적절한 DATE 유형이 있습니다.
  2. MySQL에는 비교를위한 인덱스가 있습니다.
  3. MySQL은 과 비교하여 PHP보다 훨씬 빠른을 비교합니다.
  4. 쿼리에서 데이터를 필터링하면 불필요한 데이터를 응용 프로그램으로 다시 보내는 데 소요되는 시간이 줄어들거나 줄어들지 않습니다.

다음은 가장 효율적인 형식입니다. date 열에 색인이있는 경우이 색인이 사용됩니다.

SELECT * 
FROM table 
WHERE date > DATE_SUB(NOW(), INTERVAL 15 MINUTE) 

문서 : DATE_SUB()

당신이 PHP에서 그것을 할 필요가있는 경우 :

$now = time(); 
$target = strtotime($date_from_db); 
$diff = $now - $target; 
if ($diff > 900) { 
    // something 
} 

또는 더 간결 :

if(time() - strtotime($date_from_db) > 900) { 
    // something 
} 
+0

나는 질의에서 그것을 할 수 없다, 나는 나의 PHP datetime과 PHP datetime으로 그것을 할 필요가있다. – Ralsho

+0

답장을 보내 주셔서 감사합니다. 오류가 발생했습니다 : 치명적인 오류 : 정의되지 않은 메서드 호출 DateTime :: diff() 더 많은 작업이 필요합니까? – Ralsho

+0

'DateTime :: __ construct() : 시스템의 시간대 설정에 의존하는 것이 안전하지 않습니다.'메시지가있는 '예외'예외가 발생했습니다. date.timezone 또는 date_default_timezone_set() 함수를 사용하려면 * 필수 항목입니다. 이러한 방법 중 하나를 사용 했는데도 여전히이 경고가 표시되는 경우 시간대 식별자의 철자가 틀릴 가능성이 가장 높습니다. 지금은 시간대 'UTC'를 선택했지만 date.timezone을 설정하여 시간대를 선택하십시오 – Ralsho

3

당신은 다른의 MYSQL에 대한 해결책을 가지고 답변, PHP를위한 좋은 해결책은 다음과 같습니다. -

$now = new \DateTime(); 
$target = new \DateTime(getTimeStringFromDB()); 
$minutes = ($target->getTimestamp() - $now->getTimestamp())/60; 
if($minutes < 15){ 
    // Do some stuff 
} else { 
    //Do some other stuff 
} 
+0

답변을 주셔서 감사합니다. 그러나 getTimeStringFromDB를 얻지 못했습니다. 나를 위해 일하지 않습니다. 또는 그것을 사용하는 방법을 몰라서, PHP 매뉴얼에 아무것도 표시되지 않습니다. – Ralsho

+0

@Ralsho'getTimeStringFromDB()'는 시간 문자열을 얻는 방법을 알지 못하기 때문에 place holder입니다. 당신은 그것을 실제 가치로 대체해야합니다. [태그 : 한숨] – vascowhite

1

가장 효율적인 PHP/MySQL의 통합 솔루션은 다음과 같습니다

$date = date('Y-m-d H:i:s', strtotime('-15 minutes')); 
$data = $pdo->query("SELECT date_field > '$date' as expired from table")->fetchAll(PDO::FETCH_COLUMN); 
foreach($data as $expired) { 
    if (!$expired) { 
     // Still Valid 
    } 
} 
1

)가 (이

$interval = date_create($date_from_db)->diff(new \DateTime()); 
if ($interval->format('%r%l')>15) { 
    $result = false; 
} else { 
    $result = true; 
}