我正试图从一个月前从我的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变量是字符串,但我认为查询中的转换业务应该已经处理好了吗?我错过了什么任何帮助将不胜感激。
答案 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'));