计算比较sql时间戳和php日期(“y-m-d h:i:s”)

时间:2013-05-12 21:33:32

标签: php sql comparison timestamp

有没有办法在php中查看((当前时间 - 数据库中的时间戳)> 10分钟)?我在一个名为lockout的数据库中有一行。到目前为止,我有以下代码:

echo $row['lockout'];//returns 2013-05-12 22:04:17
echo date("Y-m-d H:i:s")//returns 2013-05-12 22:06:32    

此外有没有人有任何想法为什么当我在我的数据库中插入当前时间戳时,它大概是半小时,但是有正确的日期和年份?

5 个答案:

答案 0 :(得分:2)

SQL答案可能取决于您使用的SQL技术。要在PHP而不是SQL中执行此操作,您可以使用diff() method of DateTime

$datetime1 = new DateTime($row['lockout']);
$datetime2 = new DateTime(date("Y-m-d H:i:s"));
$interval = $datetime1->diff($datetime2);
echo $interval->format('%R%i minutes');

答案 1 :(得分:1)

在PHP中,您可以使用strtotime函数与relative formats之类的- 10 minutes来获取所需的Unix时间戳:

if ( strtotime('- 10 minutes') < strtotime( $row['lockout'] ) ) ...

答案 2 :(得分:0)

在php中使用http://www.php.net/manual/en/book.datetime.php datetime类 这有一个diff方法

答案 3 :(得分:0)

如果您的SQL方言是MySQL使用

... WHERE UNIX_TIMESTAMP(NOW())-lockout>=600 ...
PHP中的

或类似内容。

答案 4 :(得分:0)

在您的查询中执行此操作:

WHERE `lockout` < DATE_SUB(NOW(), INTERVAL 10 MINUTE)

或者,如果您不能依赖MySQL的时间,请使用

mysqli_query('
 ... WHERE `lockout` < DATE_SUB(FROM_UNIXTIME(' . time() . '), INTERVAL 10 MINUTE) ...
');

或者,如果您被date(...)绑定,请使用

mysqli_query('
 ... WHERE `lockout` < DATE_SUB(' . date('Y-m-d H:i:s') . ', INTERVAL 10 MINUTE) ...
');

您可能希望比较MySQL和PHP的时区以及服务器的时区(如果MySQL和PHP位于不同的主机上)。