PHP5.x和MySQL:如何判断MySQL中的datetime是否比现在老了一定的时间间隔?

PHP5.x和MySQL:如何判断MySQL中的datetime是否比现在老了一定的时间间隔?,php,datetime,Php,Datetime,使用MySQL和PHP5.3 我有一个MySQL DATETIME字段,名为上次访问的。格式为yyyy-mm-dd hh:mm:ss 我想检查上次访问的中的值是否比现在的早30分钟。 如果是这样,我希望名为$stillInTime的变量为false。否则,它是真的 我需要知道用PHP编写比较的最佳方法是什么。所谓最佳,我指的是可能的最可读的代码块 我使用的是date\u default\u timezone\u set('UTC') 代码块应该是灵活的,以允许使用分钟、小时、天、月和年为单位进行

使用MySQL和PHP5.3

我有一个MySQL DATETIME字段,名为上次访问的
。格式为
yyyy-mm-dd hh:mm:ss

我想检查上次访问的
中的值是否比现在的
早30分钟。
如果是这样,我希望名为
$stillInTime
的变量为
false
。否则,它是
真的

我需要知道用PHP编写比较的最佳方法是什么。所谓最佳,我指的是可能的最可读的代码块

我使用的是
date\u default\u timezone\u set('UTC')

代码块应该是灵活的,以允许使用分钟、小时、天、月和年为单位进行比较

我有以下尝试:

public function isInTime($datetimeInMySQL, $intervalInString = '30 minutes') {
    $mySQLDateTimeObject = new DateTime($datetimeInMySQL);
    $dateTimeInterval = date_interval_create_from_date_string($intervalInString);
    $nowDateTimeObject = new DateTime('now');
    $mySQLDateTimeObject->add($dateTimeInterval);
    $stillInTime = ($mySQLDateTimeObject > $nowDateTimeObject);

    return $stillInTime;

}

这是我试图回答我的问题。我希望通过StackOverflow找到更好的答案。

您可以在MySQL中编写它,如下所示

SELECT * FROM table WHERE DATEADD(last_accessed INTERVAL 30 MINUTE) <= NOW()

SELECT*FROM table WHERE DATEADD(上次访问间隔30分钟)谢谢,但我想避免在MySQL查询中添加逻辑。这将是我最后的选择。我可能会将查询表达式打包成一个变量,供我的数据源对象使用。@kimsia-为什么要避免MySQL中的逻辑?逻辑更接近数据,因此可以获得更好的性能。如果使用存储过程作为访问数据库的唯一机制,则效果更好。这将使使用索引检查查询(因为它们位于一个位置)变得更容易。这还具有将业务逻辑放在一个位置并确保数据保持一致的附加优势。毕竟,在一家公司中,数据库是最重要的资产之一,如果它被破坏(即不一致),纠正它是非常困难和昂贵的。我偏爱CakePHP和Symfony等框架,因此,我倾向于避免在MySQL中添加逻辑