2012-03-18 5 views
0

datetime 데이터가 저장된 MySQL 테이블이 있습니다. 주어진 시간 이후로 30 일이 경과했는지 알아야합니다. 어떻게해야합니까?PHP/MySQL : Datetime 계산?

목업 코드 : 당신은 바로 데이터베이스에서 결과를 선택할 수 있습니다

$query = mysql_query("SELECT data FROM myTable LIMIT 1"); 
$row = mysql_fetch_array($query); 
if(days_passed($row['date'], 30)) 
    echo "30 days has passed since the given date time."; 
+1

짧은 답변 : * WHERE 날짜> '2012-04-17'(* * 날짜 ('Ym-d', strtotime ('오늘 +30 일')) *) 긴 대답 : 많은 방법. – Corbin

+1

'date' 필드의 형식/데이터 형식은 무엇입니까? – Starx

+1

@corbin, 답변입니다. 답변이 아닌 주석으로 추가해야합니다. –

답변

3

, 당신이 당신의 if 문에이 기능을 사용할 수 있습니다. 현재 날짜의 차이가 제공되는 경우 true를 반환 할 것이다

function days_passed($date, $days) { 
    $old = new DateTime($date); 
    $now = new DateTime(); 
    $interval = $old->diff($now); 
    return ($interval->days >= $days); 
} 

가> = 두 번째 인수에 제공 일수.

그러나 SQL에서는이 작업을 선호 할 수 있습니다.

+0

일수를 알고 싶다면'$ interval-> days'를 사용하는 것이 더 좋습니다. '$ interval-> d'는 '1 개월과 5 일'과 같은 명령문에서 유용한 숫자를 반환합니다. – Arjan

+0

@Arjan woops - 정정 됨, 감사합니다. –

2

;

SELECT *, ADDDATE(`date`, INTERVAL 30 DAY) < NOW() more_than_30_days_ago 
FROM myTable LIMIT 1; 

다음과 같은 것을 사용하십시오.

if($row['more_than_30_days_ago']) 
    echo "30 days has passed since the given date time."; 

간단한 데이터베이스 데모 데모 here.

3

같은에 쿼리를 변경 :

SELECT TIMESTAMPDIFF(DAY, `date`, NOW()) AS days_passed FROM myTable LIMIT 1 

것은 date 이후의 일 수를 반환합니다.

SQLFiddle : 여기 http://sqlfiddle.com/#!2/015c9/2

0

는 PHP로 : 직접 질문에 응답

$days = 30; 
if(date('Y-m-d', strtotime("{$row['date']} +{$days}day")) < date('Y-m-d')) 
    echo "More than 30 days has passed"; 
1
$date = date('Y-m-d', strtotime('today + 30 days')); 
$query = mysql_query("SELECT date FROM tbl WHERE date > '{$date}' LIMIT 1"); 
if (mysql_num_rows($query)) { ... } 

귀하의 질문에 당신은 단지 데이터를 가져 와서 확인하기 때문에 실제로 끌어낼 필요조차 없습니다. WHERE 절을 사용하면 행이 당겨지면 그 행이 발견되었음을 알 수 있습니다.

(실제로 멀리 데이터를 처리해야하거나 다른 조건이 포함 된 경우, 다른 답변 중 하나는 아마도 더 좋다.)