2012-07-18 9 views
13

データベースからアイテムのリストを取得していますが、それぞれにCURRENT_TIMESTAMPがあり、これはtimeagoの助けを借りて「x分前」に変更されています。それはうまくいきます。しかし、問題は30分もかからないアイテムに "NEW"バナーが必要なことです。生成されたタイムスタンプ(たとえば、2012-07-18 21:11:12)を現在の時刻から30分以内に取得したら、その項目に「NEW」バナーをエコーすることができます。PHPタイムスタンプが30分未満であることを確認する

+0

time() - 30 * 60を使用することを誰も示唆していないのは興味深いことです。私がUNIXのタイムスタンプを整数として直接使用するのは唯一の人だろうかと思います。 – Mahn

答えて

46

strtotime(「-30分」)を使用し、行のタイムスタンプがそれより大きいかどうかを確認します。

例:

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

私はMySQLの日付をUnixタイムスタンプを取得し、その後、再びタイムスタンプが30分前だったものを得るために二回ここの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

関連する問題