'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-d', 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 = $scheduleDate->modify("+1 month"); if ($idx >= count($comboarr)) { $idx = 0; } } return json_encode($newarr); } }