Codeigniter: - 获取月度回顾报告

时间:2016-11-22 14:01:20

标签: php mysql string codeigniter

我试图通过过滤create_date计算行数来按月获取报告,如下所示:

for ($i= 1; $i <= 12; $i++) {

    if ($i >= 1 && $i <= 9) { 
        $month = '0' . $i;
    } 
    else {
        $month = $i;
    }

    $month = date('Y-m-d', strtotime('today - '  . $i . 'month'));  
    var_dump($month);  

    $where = array('created_date >=' => $month . " 00:00:00", 'created_time <=' => $month . " 23:59:59");
    $get_opportunities_list[$month] = count($this->db->where($where)->get('tbl_project')->result());

当我var_dump($month);时,我会得到确切的日期和月份,但是显示2015年而不是2016年。请帮助..

Var_dump: string(10) "2016-10-22" string(10) "2016-09-22" string(10) "2016-08-22" string(10) "2016-07-22" string(10) "2016-06-22" string(10) "2016-05-22" string(10) "2016-04-22" string(10) "2016-03-22" string(10) "2016-02-22" string(10) "2016-01-22" string(10) "2015-12-22" string(10) "2015-11-22"

3 个答案:

答案 0 :(得分:0)

我建议您使用php Datetime类进行此类操作。

$begin = new DateTime('2016-01-01');
$end = new DateTime();
$interval = new DateInterval('P1M');
$daterange = new DatePeriod($begin, $interval, $end);
foreach ($daterange as $date) {
    $where = [
        'created_date >=' => $date->format('Y-m-d 00:00:00'),
        'created_time <=' => $date->format('Y-m-d 23:59:59')
    ];
    $get_opportunities_list[$date->format('Y-m-d')] = count($this->db->where($where)->get('tbl_project')->result());
}

另外,我建议您避免在循环中查询数据库。 希望这有帮助

答案 1 :(得分:0)

使用

$month = date('Y-m-d', strtotime(date('Y').'-'.$i.'-'.date('d')));    

取代

$month = date('Y-m-d', strtotime('today - '  . $i . 'month'));

您没有在strtotime()中定义年份,因此默认情况下它是从过去开始的日期。

答案 2 :(得分:0)

<强> DEMO

for ($i= 1; $i <= 12; $i++) {
    if ( $i <= 9)  { 
    $month = '0' . $i;
    } else {
    $month = $i; 
    }
    $date = date("d");
    $year = date("Y");
    $month = date('Y-m-d', strtotime($date."-" . $i ."-". $year));  
    var_dump( $month );  
}