- クエリビルダで
DATE型のフィールドを取得すると、Cake\I18n\FrozenDateオブジェクトが返される - 同じく、
DATETIME型を取得すると、Cake\I18n\FrozenTimeオブジェクトが返される
サンプル
var_dump( $query->find()-> .... ->get('field_date') ); //field_date = DATE 型のフィールド
↓
// Cake\I18n\FrozenDate オブジェクトが返される
object(Cake\I18n\FrozenDate)#2802 (3) {
["time"]=>
string(25) "2019-11-07T00:00:00+00:00"
["timezone"]=>
string(3) "UTC"
["fixedNowTime"]=>
bool(false)
}
ドキュメントより抜粋
3.2 移行ガイド - 新しいイミュータブルな Date と Time オブジェクト
3.2 では、ORM は イミュータブルオブジェクトと date/datetime カラムをマッピングすることができます
date この型の戻り値は、ネイティブな DateTime クラスを拡張した Cake\I18n\Date です。
デフォルトでイミュータブルオブジェクトが有効になります
備考: Cake\I18n\FrozenDate オブジェクトから日付を取得する方法
- Cake\I18n\Time::i18nFormat を使う
FrozenTime および FrozenDate クラスは Time オブジェクトが持っているのと同じ API を提供しています - See: 3.2 移行ガイド - 新しいイミュータブルな Date と Time オブジェクト
- こんな感じ
$query->find()-> .... ->get('field_date')->i18nFormat('yyyy/MM/dd');
ハマった事: フォーマットの指定は大文字の YYYY でなく、小文字の yyyy
- DATE 型の
2199/12/31を...->i18nFormat('YYYY/MM/dd')すると2200/12/31になってしまいハマった...->i18nFormat('yyyy/MM/dd')としないと意図した動作をしない
- 参考になったエントリー
2019/12/15 追記
こっちのほうがシンプル
$query->find()-> .... ->get('field_date')->toDateString()$query->find()-> .... ->get('field_date')->toDateTimeString()
// app/vendor/cakephp/chronos/src/Traits/FormattingTrait.php
trait FormattingTrait
{
/**
* Format the instance as date
*
* @return string
*/
public function toDateString()
{
return $this->format('Y-m-d');
}