###前提・実現したいこと
CakePHP3.4.2にてDatetime(3)に設定されているカラムのデータをfindにて取得するとミリ秒以下が削られてしまいます。
こちらをミリ秒まで取得する方法をご存じの方いらっしゃいませんでしょうか?
###Datetime型のDebugの内容は以下の通りです
object(Cake\I18n\FrozenTime) { 'time' => '2017-03-02T01:40:10+09:00', 'timezone' => 'Asia/Tokyo', 'fixedNowTime' => false } DB上に実際に格納されている値:「2017-03-02 01:40:10.917」 i18nFormat('yyyy-MM-dd HH:mm:ss.S')も試してみましたが、ミリ秒が0になってしまいます。
###補足情報(言語/FW/ツール等のバージョンなど)
CakePHP 3.4.2
PHP 7.1.2
MariaDB 10.1.10
よろしくお願い致します。
###下記の回答を参考にさせて頂き動作が確認出来ましたのでコードを記載致します。
PHP
1//bootstrap.php 2Type::map('dtm', 'App\Database\Type\DateTimeMilliType'); 3Type::build('dtm') 4 ->useImmutable();
PHP
1//DateTimeMilliType.php 2namespace App\Database\Type; 3 4use Cake\Database\Type\DateTimeType; 5use Cake\Database\Driver; 6 7class DateTimeMilliType extends DateTimeType { 8 9 protected $_format = 'Y-m-d H:i:s.u'; 10 11 public function toPHP($value, Driver $driver) { 12 if ($value === null || strpos($value, '0000-00-00') === 0) { 13 return null; 14 } 15 16 if (strpos($value, '.') !== false) { 17 //list($value) = explode('.', $value); 18 } 19 20 $instance = clone $this->_datetimeInstance; 21 $tmp_obj = $instance->createFromFormat('Y-m-d H:i:s.u', $value); 22 return $tmp_obj; 23 } 24 25}
PHP
1//table 2 protected function _initializeSchema(Schema $schema) { 3 4 $schema->columnType("modified", 'dtm'); 5 $schema->columnType("created", 'dtm'); 6 return $schema; 7 }
PHP
1//ミリ秒まで取得 2//debug()だとミリ秒まで表示されないがformat()で表示されました 3//i18nFormatでも何故かミリ秒が表示されませんでした 4$item->created->format('Y-m-d H:i:s.u')
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/03/02 09:25
2017/03/02 10:27 編集
2017/03/02 10:33
2017/03/02 14:02