2012-07-18 369 views
13

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

+0

我觉得很有趣,没有人建议使用time() - 30 * 60,不知道我是否是唯一一个用来直接使用unix时间戳作为整数的时间戳。 – Mahn 2012-07-18 20:50:40

回答

46

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

例子:

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

我使用的strtotime()在这里两次获得UNIX时间戳你的mysql日期,然后再拿到时间戳是以什么29分钟前。如果30分钟前的时间戳大于mysql记录的时间戳,那么它必须创建超过30分钟。

+0

为简洁起见,不会出现任何要点。 – 2012-07-19 21:57:02

+0

+1。谢谢。这是比我一直在做的更好的方式。我现在这样做:'if($ post_date <(time() - 600))'但是使用'strtotime()',但把它放在普通的英文中比查找减去的秒数要容易一些:) – Nathan 2012-10-02 21:16:38

+0

@ user1511331你应该接受这个答案(参见[接受答案如何工作?](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235)),因为它帮助你。 – Nathan 2012-10-02 21:16:53

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->格式(“i”)'将为29. – Mike 2012-07-18 20:46:18

+0

'$ interval = new DateInterval('PT1H29M'); echo $ interval-> format('%i minutes');'回声“29分钟” – Mike 2012-07-18 20:48:28

+0

@Mike我忘记了这一点,我想这就是我没有真正测试代码的结果。我**这次**做了测试,它按预期工作。 =) – Crontab 2012-07-19 13:44:19

相关问题