[CakePHP4]Queryからの日付取得

CakePHP4でqueryからカラムの日付をstrtotime()で変換しようとしたら以下のようなエラーになります。

strtotime() expects parameter 1 to be string, object given

以前のバージョンでは、日付と時刻はstringで帰ってきていましたがQueryビルダではFrozenTimeクラスが返ってきます。
templateなどでqueryの内容を出力する場合は自動的にstringに変換されるようですが、関数の引数などで引き渡す場合はオブジェクトそのものが渡るのでエラーになってしまいます。

nice()メソッドを使う

こういった場合はnice()メソッドを使うといい感じのフォーマットで出力してくれます。
ロケーション設定していない場合は、英語表記で出てきてしまいます。その場合や、独自フォーマットにしたいということであればi18nFormat()メソッドを使うことで出力フォーマットを指定できます。
ですが、日本語限定のサイトの場合はとりあえずロケーション設定をしておいた方がいいとは思います。

//config/app.php の中で
'App' => [
    'defaultLocale' => env('APP_DEFAULT_LOCALE', 'ja_JP'),
    'defaultTimezone' => env('APP_DEFAULT_TIMEZONE', 'Asia/Tokyo'),
],

FrozenTime::setDefaultLocaleメソッドを使えば動的に変更も可能かと思います。

また、FrozenTimeは日付と時刻の管理だけではなく、xx日後の日付の取得など計算や比較などの便利な機能がたくさんありますので一通り見ておくといいかと思います。

タイトルとURLをコピーしました