19

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

4

3 に答える 3

60

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

例:

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

ここではstrtotime()を2回使用して、mysqlの日付のUNIXタイムスタンプを取得し、次に30分前のタイムスタンプを取得しています。30分前のタイムスタンプがmysqlレコードのタイムスタンプよりも大きい場合は、30分以上経過して作成されている必要があります。

于 2012-07-18T20:30:28.850 に答える
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実際にはそのタイプの合計(この場合は日)のみを返すことを忘れていました。他のすべては、時間の書式を表示するためのものです。上記を実際に機能するように拡張しました。

于 2012-07-18T20:32:16.400 に答える