使用PHP日期从数据库中的某些日期获取记录

时间:2013-06-20 13:57:02

标签: php sql datetime zend-framework2

我正试图从一个月前从我的SQL db中获取记录。我在PHP中使用当前日期和一个月前的日期,并尝试将它们传递给我的SQL查询。不幸的是,我对数据库中日期的格式没有发言权,所以我肯定要转换日期。

我以为我弄清楚了,但显然没有。

public function successRate()
{
    $resultSet = $this->tableGateway->select(function(Select $select){
        $now    = date('y-m-d h:m:s');
        $then   = date('y-m-d h:m:s', strtotime('-1 month'));
        $select->where("enddate between convert(datetime, '" . $then . "') and convert(datetime, '" . $now . "')");
    });
    return $resultSet;
}

所有这些东西都是来自框架的助手,没关系,但是我想弄清楚的是第6行的查询 - 在“$ select-> where(”。

之后

我在数据库本身运行了这个查询并且它有效:

select * from jobhistory where enddate between convert(datetime, '2013-05-20 00:00:00') and convert(datetime, '2013-06-20 00:00:00')

但我的PHP函数中的查询会出现此错误:

'将varchar数据类型转换为日期时间数据类型会导致超出范围的值。'

我知道我的$ then和$ now变量是字符串,但我认为查询中的转换业务应该已经处理好了吗?我错过了什么任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

$now    = date('y-m-d h:m:s');
$then   = date('y-m-d h:m:s', strtotime('-1 month'));

应该是

$now    = date('y-m-d h:i:s');
$then   = date('y-m-d h:i:s', strtotime('-1 month'));

注意i分钟。 http://www.php.net/manual/en/function.date.php

另外,根据你的评论,它应该是

$now    = date('d-m-Y h:i:s');
$then   = date('d-m-Y h:i:s', strtotime('-1 month'));