如何在Zend Framework Query中查找两个日期之间的所有日期

时间:2012-02-15 12:34:53

标签: zend-framework zend-db zend-db-table

我需要找到两个日期之间的所有日期;这是开始日期和结束日期。这是我的查询,但它不是我需要做的事情。

在我的表格中,我的列名为date_created,其格式与此2011-06-09 06:41:10相同。我想删除此部分06:41:10,因此我正在申请

DATE(date_created)

之后,因为我的日期选择器采用此格式02/07/2012,我将格式更改为DATE_FORMAT()

$start_date and $end_date是我的变量,用于比较02/07/2012

的格式
$select = $DB->select()
->from('sms', array(
    'sms_id',
    'sms_body',
    'sms_sender',
    'sms_recipient',
    'date_created',
    'sms_type'))
->where('phone_service_id = ?', $phone_service_id)
->where("DATE_FORMAT(DATE(date_created), '%m/%d/%Y') >= ?",  $start_date)
->where("DATE_FORMAT(DATE(date_created), '%m/%d/%Y') <= ?",  $end_date)
->order("".$option_call_log." ".$option_call_log_asc_desc);

查询中缺少什么?为什么不比较$ start_date和$ end_date?
忘记$option_call_log$option_call_log_asc_desc

2 个答案:

答案 0 :(得分:9)

如果您的日期以MM / DD / YYYY格式发布,那么我不会让MySQL完成所有工作,而是将它们转换为YYYY-MM-DD HH:II:PHP中的SS,它允许您在MySQL中做一个简单的基于范围的查询。所以:

$start_date_formatted = date('Y-m-d', strtotime($start_date)).' 00:00:00';          
$end_date_formatted = date('Y-m-d', strtotime($end_date)).' 00:00:00';

$select = $DB->select()
    ->from('sms', array('sms_id','sms_body','sms_sender','sms_recipient','date_created','sms_type'))
    ->where('phone_service_id = ?', $phone_service_id)
    ->where("date_created >= ?",  $start_date_formatted)
    ->where("date_created <= ?",  $end_date_formatted)
    ->order("".$option_call_log." ".$option_call_log_asc_desc)
    ;

(如果您的日期选择器中的日期实际上是DD / MM / YYYY格式,那么事情会更加繁琐。)

答案 1 :(得分:1)

更新更改小时数以包含最后一天 $ end_date_formatted = date('Y-m-d',strtotime($ end_date))。' 23时59' 分59秒;