我试图通过过滤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"
答案 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 );
}