'BW002', 'month'=>'EM002', 'quarter'=>'EQ002', 'half'=>'HY002', 'year'=>'EY002' ]; private $bwarr = [ 'week','month','week','month','week','quarter', 'week','month','week','month','week','half', 'week','month','week','month','week','quarter', 'week','month','week','month','week','year' ]; private $emarr = [ 'month','month','quarter','month','month','half', 'month','month','quarter','month','month','year' ]; private $combo; private $startdate; private $enddate; public function __construct($combo, $startdate, $enddate){ $this->combo = $combo; $this->startdate = $startdate; $this->enddate = $enddate; } public function getComboNo(){ $comboarr = (array) $this->combo === 'bw' ? $this->bwarr : $this->emarr; $startdate = new DateTime($this->startdate); $enddate = new DateTime($this->enddate); $interval = date_diff($startdate, $enddate); $months = $interval->y * 12 + $interval->m; $months = $this->combo === 'bw' ? $months*2 : $months; $newarr = []; $idx = 0; $ori_first_month = date('m', strtotime($this->startdate)); $first_day = date('Y-m-d', strtotime($this->startdate. ' + 3 days')); $new_first_month = date('m', strtotime($first_day)); if($ori_first_month != $new_first_month){ $first_day = date('Y-m-t', strtotime($this->startdate)); } $scheduleDate = new DateTime($first_day); for ($i = 0; $i < $months; $i++){ $newarr[] = [$this->comboarr[$comboarr[$idx]], $scheduleDate->format("Y-m-d")]; $idx ++; $scheduleDate = $startdate->modify("+1 month"); if($idx >= count($comboarr)){ $idx = 0; } } return json_encode($newarr); } }