MySQL用CakePHP查询日期

use*_*854 0 php cakephp cakephp-2.3

我正在尝试选择介于2个日期之间的值,因此我将不得不使用<=和> =,但是,我的查询看起来似乎只是小于或大于并且不考虑等于日期的值.

我正在使用CakePHP,以"Ymd h:i:a"格式保存日期.我想在给定的一周间隔(从星期日开始)找到日期,所以我使用了以下内容.

$start_date = date('Y/m/d', strtotime('last Sunday', strtotime($timestamp)));
$formatted_start_date = str_replace("/","-",$start_date);
Run Code Online (Sandbox Code Playgroud)

我试图将$ start_date格式化为"Ymd",但之后它找不到正确的日期,所以我将其切换到它的方式并使用str_replace将其格式化为使用" - "而不是"/".

$date_query = $this->Order->query("select * from orders where id = '$id' and created => '$formatted_start_date' and created <= '$current_timestamp' "); 
Run Code Online (Sandbox Code Playgroud)

考虑到我的数据库中的时间值是"Ymd h:i:a"格式,我可以使用"Ymd"进行日期比较吗?是否可以执行涉及LIKE和<=的MySQL查询?

Dav*_*ave 9

无需做str_replace()- 只需获得Y-m-d:

$start_date = date('Y-m-d', strtotime('last Sunday', strtotime($timestamp)));
Run Code Online (Sandbox Code Playgroud)

然后,使用CakePHP约定(是的,您可以使用Ymd进行日期比较,而不是手动创建查询,即使存储在数据库中的日期时间是Ymd H:i:s)

$this->Order->find('all', array(
    'conditions' => array(
        'id' => $id,
        'created >=' => $start_date,
        'created <=' => $end_date . ' 23:59:59',
        'my_field LIKE' => '%whatever%'
));
Run Code Online (Sandbox Code Playgroud)

虽然 - 这似乎有点奇怪 - 通常你要么通过'id'或日期范围寻找某种东西 - 而不是两者兼而有之.但是 - 也许你有一个理由:)

正如您在上面所看到的,是的,如果需要,您也可以添加"LIKE".