CakePHP3のdatetime型カラムの日時の扱い。秒まで正しく表示する方法
2019/07/28
CakePHP3の datetime型カラムを秒まで正しく表示したい!そんなときの対処方法
CakePHP3で datetime型のカラムは i18nFormatを使ってフォーマットを指定
CakePHP3で datetimeのカラムの年月日、時分秒を表示させたい場合は「i18nFormat()」を使用し、下記の様に記述します。
1 |
echo $users->created->i18nFormat('yyyy年MM月dd日 HH:mm:ss'); |
※Usersテーブルの createdカラムの日時を表示する想定です。
※「yyyy」は小文字で指定します。大文字だと違う値を取得してしまいます。
CakePHP3 Cookbook 日付と時刻・フォーマットする
https://book.cakephp.org/3.0/ja/core-libraries/time.html#id3
フォーマットの指定方法については以下を参照
https://www.php.net/manual/ja/class.intldateformatter.php
http://www.icu-project.org/apiref/icu4c/classSimpleDateFormat.html#details
CakePHP3で datetime型のカラムの扱い方
Bakeで出力される datetime型の項目
CakePHP3で Bakeを実行すると、datetime型の createdカラムのデフォルトで出力される表記は下記のようになります。
1 |
echo h($users->created); |
表示されるのは「1/1/19, 1:01 AM
」のようになります。
date + strtotimeでフォーマットを指定する方法
これを「**年**月**日 **:**:**」形式で表示したい場合は、CakePHP3であっても datetime型のカラムですので、普通の PHPの関数で日時を表示することも可能です。
1 |
echo date("Y年m月d日 H:i:s", strtotime(h($users->created); |
表示されるのは「2019年01月01日 01:01:00
」のようになります。
ですが、よくよく見ると「秒」の表示が常に「00」なのです。
CakePHP3では「i18nFormat()」でフォーマットを指定
これを正しく表示させる方法が、CakePHP3には用意されています。
その方法が最初に紹介した下記の方法です。
1 |
echo $users->created->i18nFormat('yyyy年MM月dd日 HH:mm:ss'); |
表示されるのは「2019年01月01日 01:01:01
」のようになります。
ちなみに、CakePHP3では datetime型のカラムのデータを下記のようなオブジェクトとして保持しています。
1 2 3 4 5 6 |
Cake\I18n\FrozenTime Object ( [time] => 2019-01-01T01:01:01+00:00 [timezone] => UTC [fixedNowTime] => ) |
そのため、それを取り出すときは「i18nFormat()」でフォーマットを指定して取り出す、という仕様のようです。
値がないときはエラーになるためチェックの分岐が必要
ちなみに、createdや modifiedなどは必ず入力があるかと思いますが、deleted(削除日時カラム)などの入力がない可能性があるカラムの場合は、下記の様に入力がない場合の対処が必要です。
値がない場合はエラーとなりますので。
1 |
echo $users->deleted ? $users->deleted->i18nFormat('yyyy年MM月dd日 HH:mm:ss') : ""; |
「i18nFormat()」の時だけに限らず、strtotime()関数でもエラーになります。
CakePHP3の関連記事
CakePHP4のCSS、JavaScript、画像のブラウザへのキャッシュをコントロールするCakePHP3でレコードを保存(追加、更新、Insert、Update)する複数の方法を紹介
CakePHP3でモデルなしフォームからCSVをアップロードしレコードを更新する方法解説
CakePHP3でPHP Simple HTML DOM Parserを使ってスクレイピングする方法
CakePHP3のInsert On Duplicate Key Update(upsert)構文を解説・バルク処理も
CakePHP3の1対多での連携を中間テーブルを使った多対多の連携に変更するときの手順
CakePHP3でデフォルトのソート条件を設定してユーザの選択肢たソート条件を有効にする方法
CakePHP3で Ajaxを使う方法の解説。3.6以降対応。Successとthenの両方を解説。
CakePHP3でパンくずの指定は HTMLヘルパーを使って指定する方法を解説
CakePHP3にOGPをfetch、asignを利用してテンプレートごとに指定する方法を解説
その他の「CakePHP3」に関する記事一覧
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
CakePHP3でQRコードを作成、表示するライブラリ「cakePHP-QR-Code-Helper」
CakePHPでQRコードを生成するライブラリ「cakePHP-QR-Code-Helper」の紹介。GDライブラリのインストールも必要ないHelperとして提供されているため、ファイルを設置すればすぐに使用可能。
-
-
CakePHP3でassociatedを使って関連データをまとめて保存する方法(hasOne、hasMany、belongsTo)
CakePHP3で関連データをまとめて保存する方法。hasOne、hasMany、belongsTo等の関連データはassociatedを追加することでまとめて保存することができます。
-
-
CakePHP 2.3 Search Pluginで検索処理 その1設置方法
CakePHPの検索プラグイン Search Pluginの設置方法と基本的な検索処理の解説です。
-
-
CakePHP4のCSS、JavaScript、画像のブラウザへのキャッシュをコントロールする
CakePHP4、CakePHP3でブラウザにキャッシュさせる設定の解説。CSS、JavaScript、画像をブラウザにキャッシュさせるのか、定期的にリロードする設定にするのかの設定が可能。
-
-
CakePHP 2.3 Search Pluginで検索処理 その6ORDER、sortソートの機能
CakePHPの検索プラグイン Search Pluginの検索処理の中で order、ソートについての解説です。
-
-
CakePHP 2.3 Search Pluginで検索処理 その5入力項目に複数項目入力した場合の AND検索、OR検索
CakePHPの検索プラグイン Search Pluginの検索処理の中で複数項目を入力した場合の AND検索、OR検索についての解説です。
-
-
CakePHP3のfriendsofcake/searchでツリーカテゴリーの子階層も含めて検索する方法
CakePHP3のツリービヘイビアを使ったツリーカテゴリーの子階層も含めての検索を検索プラグイン「friendsofcake/search」を使って実現する方法を解説しました。
-
-
CakePHP3で生の SQLの実行はConnectionManagerを使う
CakePHP3で生の SQL文を実行する方法を解説。クリエビルダーを使う場合は TableRegistryを利用するが、SQLを実行する場合は ConnectionManagerを使う。プリペアードステートメントの使用方法も解説。
-
-
URL短縮サービス「TTTオンライン(https://ttt.onl)」公開
URL短縮サービス「TTTオンライン(https://ttt.onl)」を公開。メールやSNSでは使いにくい長いURLを短いURLに変換するサービス。QRコードも。Google URL Shortenerが2019年3月にサービス終了。
-
-
CakePHP3チュートリアルで日付と時刻のDateTimeでエラーが出たときの対処方法
CakePHP3のブックマークチュートリアルには記載ミスもあり、そのまま動かない個所もある。CakePHP3では namespaceを使うようになったので、classを呼び出すときに¥を追加する必要が!