19

我从我的数据库中获取了一个项目列表,每个项目都有一个 CURRENT_TIMESTAMP 在timeago的帮助下我已将其更改为“x 分钟前” 。所以这很好。但问题是我还想在不到 30 分钟的物品上贴上“新”横幅。我如何获取生成的时间戳(例如:2012-07-18 21:11:12)并说它是否距离当前时间不到 30 分钟,然后在该项目上回显“新”横幅。

4

3 回答 3

60

使用strtotime(“-30 分钟”),然后查看您的行的时间戳是否大于该值。

例子:

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

我在这里两次使用 strtotime() 来获取 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 回答
1

你也可以这样做——

$currentTime=time(); 

检查上次更新时间是否超过 30 分钟

last_updated_at <  $currentTime - (60*30)
于 2018-09-21T08:02:27.207 回答