2012-07-18 3 views
13

데이터베이스의 항목 목록을 가져 오는 중, 각각에 timeago의 도움으로 'x 분 전'으로 변경 한 CURRENT_TIMESTAMP가 있습니다. 그래서 잘 작동합니다. 그러나 문제는 30 분 미만의 품목에 대해 "NEW"배너를 원한다는 것입니다. 생성 된 타임 스탬프 (예 : 2012-07-18 21:11:12)를 가져 와서 현재 시간에서 30 분이 지나지 않았다면 그 항목에 'NEW'배너를 표시합니다.PHP 타임 스탬프가 30 분 미만인지 확인합니다.

+0

아무도 time() - 30 * 60을 사용하여 제안하는 방법이 흥미 롭습니다. 유닉스 타임 스탬프를 정수로 직접 사용하는 유일한 사람인지 궁금합니다. – Mahn

답변

46

strtotime ("-30 분")을 사용하고 행의 타임 스탬프가 그보다 큰지 확인하십시오.

예 :

<?php 
if(strtotime($mysql_timestamp) > strtotime("-30 minutes")) { 
$this_is_new = true; 
} 
?> 

것은 내가 타임 스탬프 30 분 전 것을 얻을 다음 다시 MySQL의 날짜를 유닉스 타임 스탬프를 얻기 위해 두 번 여기에 한 strtotime()를 사용하고 있어요. 30 분 전의 타임 스탬프가 mysql 레코드의 타임 스탬프보다 크다면 30 분 넘게 생성되어야합니다.

+0

간결함을위한 포인트가 없습니다. –

+0

+1. 감사. 이것은 제가 한 일보다 더 나은 방법입니다. 나는 현재 :'if ($ post_date <(time() - 600))'을 사용하지만'strtotime()'을 사용하지만 보통 영어로 두는 것은 빼기 초 수를 찾는 것보다 쉽다. – Nathan

+0

@ user1511331 이 대답을 받아 들여야합니다 ([대답 수락 방법은 무엇입니까?] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235)) 도와 줬어. – Nathan

6

는 PHP의 DateTime 개체를 사용하여이 같은 시도 :

$now = new DateTime(); 
$then = DateTime($timestamp); // "2012-07-18 21:11:12" for example 
$diff = $now->diff($then); 
$minutes = ($diff->format('%a') * 1440) + // total days converted to minutes 
      ($diff->format('%h') * 60) + // hours converted to minutes 
      $diff->format('%i');   // minutes 
if ($minutes <= 30) { 
    echo "NEW"; 
} 

편집 : 마이크는 바로, 내가 어떤 이유로, 단지 %a 실제로이 경우 일 해당 유형의 총 (반환 잊었다). 다른 모든 것은 시간 형식을 표시하기위한 것입니다. 위의 사실을 실제로 확장했습니다.

+0

이것은 작동하지 않습니다. 시차가 1 시간 29 분이면'$ diff-> format ("i")'는 29가됩니다. – Mike

+0

'$ interval = new DateInterval ('PT1H29M'); echo $ interval-> format ('% i minutes');'echo 29 minutes " – Mike

+0

@ 그거 잊어 버렸습니다. 실제로 코드를 테스트하지 않았다고 생각합니다. 나는 ** 이번엔 테스트했는데 예상대로 작동합니다. =) – Crontab

관련 문제