2013-08-03 23 views
0

使用MySQL和PHP 5.3PHP5.x和MySQL:如何判断MySQL中的日期时间是否比现在时间早一段时间?

我有一个名为last_accessed的MySQL DATETIME字段。它的格式为yyyy-mm-dd hh:mm:ss

我想检查last_accessed中的值是否大于30分钟,而不是now。 如果是这样,我想要一个名为$stillInTime的变量为false。否则,它是true

我需要知道什么是用PHP编写比较的最佳方法。最好的是,我的意思是最可读的代码块。

我使用date_default_timezone_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寻求更好的答案。

回答

0

你可以把它在MySQL如下

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

谢谢你写的,但我想避免把逻辑在MySQL查询。这将是我最后的手段。我可能会*将查询表达式打包成一个变量,供我的数据源对象使用。 –

+0

@kimsia - 为什么要避免在MySQL中的逻辑?逻辑更接近数据,因此你可以获得更好的性能。如果您使用存储过程作为访问数据库的唯一机制,那么更好。这样可以更容易地检查你的查询(因为它们在一个地方)与你的索引。这还具有将业务逻辑集中在一个地方并确保数据保持一致的优势。毕竟在公司里,数据库是最重要的资产之一,如果它被损坏(即不一致),那么纠正就非常困难而且代价高昂。 –

+0

我偏爱像CakePHP和Symfony这样的框架,因此我倾向于避免将逻辑放在MySQL –