CakePHP(v3.x),ChronosのDate(FrozenDate)クラスで月の間隔を求める.

今回はCakePHPのDateクラスを利用して月の間隔を求めて行きます. (ミュータブルなDateクラスの方はバグの温床になりがちなので,immutableなFrozenDateクラスを使います.)

use Cake\I18n\FrozenDate;


function hoge(){
    $date_now = new FrozenDate();
    $date_3months_later = (new FrozenDate())->addMonth(3);

    $this->log($date_now); // 2019/09/24
    $this->log($date_3months_later); // 2019/12/24
}

ここで,$date_nowと$date_3months_laterが何ヶ月離れているかを求めたいわけですが,diffInMonthsメソッドが有効です.

   $this->log($date_now->diffInMonths($date_3months_later)); // 3

これは,デフォルトで引数を渡さない状態では,絶対値を返します. 以下のように呼び出すと,符号がつきます.

   $this->log($date_now->diffInMonths($date_3months_later, $abs = false)); // 3
   $this->log($date_3months_later->diffInMonths($date_now, $abs = false)); // -3