CakePHP3、CakePHP4のdatetime型カラムの日時の扱い。秒まで表示する方法
2022/07/16
CakePHP3、CakePHP4の datetime型カラムを秒まで正しく表示したい!そんなときの対処方法
CakePHP3、CakePHP4で datetime型のカラムは i18nFormatを使ってフォーマットを指定
CakePHP3、CakePHP4で 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
CakePHP4 Cookbook 日付と時刻・フォーマットする
https://book.cakephp.org/4/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向けの記事として書いたものですが、CakePHP4でも全く同様に動作することを確認しました。
CakePHP3、CakePHP4で datetime型のカラムの扱い方
Bakeで出力される datetime型の項目
CakePHP3、CakePHP4で Bakeを実行すると、datetime型の createdカラムのデフォルトで出力される表記は下記のようになります。
1 |
echo h($users->created); |
表示されるのは「1/1/19, 1:01 AM
」のようになります。
date + strtotimeでフォーマットを指定する方法
これを「**年**月**日 **:**:**」形式で表示したい場合は、CakePHP3、CakePHP4であっても datetime型のカラムですので、普通の PHPの関数で日時を表示することも可能です。
1 |
echo date("Y年m月d日 H:i:s", strtotime(h($users->created); |
表示されるのは「2019年01月01日 01:01:00
」のようになります。
ですが、よくよく見ると「秒」の表示が常に「00」なのです。
CakePHP3、CakePHP4では「i18nFormat()」でフォーマットを指定
これを正しく表示させる方法が、CakePHP3、CakePHP4には用意されています。
その方法が最初に紹介した下記の方法です。
1 |
echo $users->created->i18nFormat('yyyy年MM月dd日 HH:mm:ss'); |
表示されるのは「2019年01月01日 01:01:01
」のようになります。
ちなみに、CakePHP3、CakePHP4では 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」に関する記事一覧
CakePHP4系でJSONレスポンスの処理ではwithStringBodyを使う。3との違い解説
CakePHP4、CakePHP5の「warning: DebugKit is disabling...」の対処方法
MySQL+CakePHPのdate型、datetime型項目は「2999-12-31」までしか扱えない
CakePHP4のFrozenDateで1ヵ月前、先月、今月1日、来月末の日付などを算出する方法
CakePHP4のcake cache clear_allでPermission deniedはパーミッションの変更が必要
CakePHP4のクリエビルダーを使用してOR条件をAND条件でつなぐSQL文を作る方法
CakePHP4のController内でViewテンプレート、レイアウトの変更設定を記述する方法
CakePHP4から外部のデータベースにアクセスする方法解説
CakePHP4の数値項目は「like %10%」の部分一致検索(find select)はできない
CakePHP4でロギングスコープやログレベルを使用してログを出し分ける方法を解説
その他の「CakePHP4」に関する記事一覧
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
CakePHP 2.3 連携先のテーブルの項目で条件抽出する場合
アソシエーション(連携)している先のテーブルの項目で条件抽出する際の考え方と注意点をサンプルソースを用いて説明しています。
-
-
CakePHP4でロギングスコープやログレベルを使用してログを出し分ける方法を解説
CakePHPのログ出力方法の解説。app.phpにログ設定をし、スコープやレベルを指定してログ出力を振り分ける方法、CakePHP4で配列出力にはvar_exportが必要なことなどを解説。
-
-
CakePHP3のHtmlHelperのLink設定のまとめ。mailto、URL、Root/Homeのリンクなども
CakePHP3でHtmlHelperを使ってリンクの設定をする方法のまとめ。基本形からURLを指定、class、id、targetを指定、mailtoのリンク、画像をアンカーに、JavaScriptのダイアログなどの解説。
-
-
CakePHP 2.3 bakeの超初心者向けフォロー講座
CakePHP 2.3 bakeの超初心者向けフォロー講座
-
-
CakePHP 2.3 Search Pluginで検索処理 その5入力項目に複数項目入力した場合の AND検索、OR検索
CakePHPの検索プラグイン Search Pluginの検索処理の中で複数項目を入力した場合の AND検索、OR検索についての解説です。
-
-
CakePHP3でユーザ定義の定数、変数を設定し、読み込む方法解説
CakePHP3で定数や共通で使う変数をまとめて設定し、プログラム内で読み込む方法を、bootstrap.phpに直接記述する方法と定数ファイルを分ける方法の3つの方法で解説。
-
-
CakePHP3のビューで受取ったテーブルのオブジェクトを連想配列に変換する方法
コントローラーからビューに送ったテーブルのオブジェクトを連想配列に変換し、ビューの中で自由に使えるようにするメソッド「toArray()」の解説。連想配列に変換できれば利用度アップ!
-
-
CakePHP 2.3で saveの便利な使い方・サンプルソース付き
CakePHPのレコードを保存、更新する際に使う Saveを詳細解説します。
-
-
CakePHP4のクリエビルダーを使用してOR条件をAND条件でつなぐSQL文を作る方法
CakePHP4のクリエビルダーを使って複数のOR条件をANDでつなぐSQL文を作成する方法を解説。OR条件を記述したwhere句を2つつなげて記述する。
-
-
CakePHP3のデバッグキット(DebugKit)を強制的に有効、無効に変更する方法
CakePHP3に付属しているデバッグのためのツール、デバッグキットを強制的に有効化、無効化する方法を解説。初期設定では開発環境としてありそうなドメインの場合のみ有効になるように設定されている。