
【想定パターン】
Cakephp4にて、テンプレートのインプットフィールドに値をセットする際、FrozenDate のオブジェクトのフォーマットがこちらの期待するフォーマットではなく、 /(スラッシュ区切り)になっていた。期待する区切りは「-(ハイフン)」とする。
以下、日付の「年 / 月 / 日」を「年 - 月 - 日」にする方法です。
Cake4: GET時に渡ってくるFronzeDateオブジェクト
$this->Form->create($entity) でフォームにセットする日付エンティティの中身は以下の様になっています。
'start_date' => object(Cake\I18n\FrozenDate) id:2 {
'time' => '2023-08-07 00:00:00.000000+09:00'
'timezone' => 'Asia/Tokyo'
'fixedNowTime' => false
}
timeを見ればハイフンになっている。が、input フィールドではスラッシュがデフォルトになっている模様。
// 日付インプットフィールドにはスラッシュ表記になっていた。 2023/08/07
日付をハイフン表記にする方法
結論からいうと、システム全般にわたって、日付フォーマットを統一できるのであればそれが一番見通しがよいです。
config/bootstrap.php に
use Cake\I18n\FrozenDate;
FrozenDate::setToStringFormat('yyyy-MM-dd');
という形でセットします。この定義をするだけでシステム全般渡って、ハイフン表記で表示されるようになります。
すでに、運用しているシステム、また、影響を絞る必要がある場合、当該テンプレート内で上記と同じ setToStringFormat() を利用してセットすれば良い。ということになります。
(少し別の話)日付フォーマットの注意点
Cakephp4 で日付を扱う場合は、Formヘルパーで $this->Form->control() すると思います。が、type プロパティは必ずtextにしておく方が吉です。
でないと、妙な datepicker が表示され、日付フォーマットがスラッシュのままになったり、あまり嬉しくないことが多いです汗。(期待通りに扱えるならどうぞ?)