0

我正在尝试从我的 SQL 数据库中获取从今天到一个月前的记录。我使用 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 数据类型转换为 datetime 数据类型导致值超出范围。”

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

4

1 回答 1

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'));
于 2013-06-20T14:05:54.277 回答