mysql内に、 ‘2019-10-05′,’2020-01-05’,’2020-02-13’などのレコードがあった場合に、その範囲内の連続したYYYYMMの配列(2019-10, 2019-11, 2019-12, 2020-01)を作りたい時
-> 最初と最後のUnixTime範囲内で、1ヵ月づつ増えるFor文を作る。
$last = Hoge::where('user_id', $id)->orderBy('time','ASC')->first(); $last_month = substr($last['time'], 0, 7); $last_unix = strtotime('first day of ' . $last_month); $latest = Hoge::where('user_id', $id)->orderBy('time','DESC')->first(); $latest_month = substr($latest['time'], 0, 7); $latest_unix = strtotime('last day of ' . $latest_month); for($time = $last_unix; $time <= $latest_unix; $time = strtotime('+1 month', $time)){ $Ym[] = date('Ym', $time); }
取得したデータをそのままUnixTimeにして 1ヵ月づつ増やすと、 $last_month + 1 month > $latest_month となる場合があるので、$last_monthを月初の日付、$latest_monthを月末の日付に変換してからFor文を回す必要がある。
う〜ん、最初にDBのデータ型考える際に、ロジックの計算処理を考えてデータ型を決めれるようになるな。