MySQL+CakePHPのdate型、datetime型項目は「2999-12-31」までしか扱えない
2025/01/31
CakePHP4、CakePHP5の「date型」「datetime型」の最大値は「2999-12-31」
CakePHP4系、CakePHP5系の「date型」「datetime型」の最大値は「2999-12-31」までです。
ご注意ください。
MySQLの「date型」の最大値は「9999-12-31」で CakePHPとは異なる
MySQL 公式サイト 11.2.2 DATE、DATETIME、および TIMESTAMP 型
https://dev.mysql.com/doc/refman/8.0/ja/datetime.html
上記に、MySQLの「date型」「datetime型」のサポート範囲が書いてあります。
「date型」は「1000-01-01」から「9999-12-31」
「datetime型」は「1000-01-01 00:00:00」から「9999-12-31 23:59:59」
ちなみに「TIMESTAMP型」はサポート範囲が異なります。
「TIMESTAMP型」は「1970-01-01 00:00:01(UTC)」から「2038-01-19 03:14:07(UTC)」
ですので、CakePHP4系、CakePHP5系でも同様に「date型」であれば「9999-12-31」までサポートされているのかと思っていましたが、「2999-12-31」まででした。
「3000-01-01」以降の日付を入力しようとするとエラーになりますのでご注意ください。
同じように「datetime型」も「2999-12-31 23:59:59」までのサポートになっており、「3000-01-01 00:00:00」以降はエラーとなります。
CakePHPでは date型は Validationで「2999-12-31」までとなっている
CakePHP4系、CakePHP5系で「date型」が「2999-12-31」までなのは、下記の Validationに「2999」まででチェックをする処理があるためです。
対象ファイル
vendor/cakephp/src/Validation/Validation.php
「function date」(495行目辺り?)に下記の記述があります。
(CakePHP5系の場合は 470行目辺りにあります。)
|
1 2 3 4 |
// Don't allow 0000, but 0001-2999 are ok. $fourDigitYear = '(?:(?!0000)[012]\d{3})'; $twoDigitYear = '(?:\d{2})'; $year = '(?:' . $fourDigitYear . '|' . $twoDigitYear . ')'; |
上記の記述は CakePHP3系、CakePHP4系、CakePHP5系のいずれにもありますので、CakePHP4だけではなく、CakePHP3、CakePHP5でも同様に「2999-12-31」までかと思います。
また、MySQLの「date型」の最大値は「9999-12-31」ですので、「date型」項目のバリデーションをオリジナルで「9999-12-31」まで対応できるように変更すれば CakePHPでも「9999-12-31」まで扱えるようになるでしょう。
CakePHP4の関連記事
CakePHPのpostlinkで生成した削除リンクをクリックしても処理が実行されない対処法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」に関する記事一覧
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
CakePHP4で複数の引数(パラメータ)を付与してコマンドを実行する方法
CakePHP4でコマンドを実行する際に引数(パラメータ)をコマンド内で受け取る処理について解説。複数個の引数にも対応する記述方法も解説。
-
-
CakePHP4、5で$_SERVERと同じようにURIを取得する「getUri()」の紹介
PHPでサーバ情報、環境情報を取得する際は「
$_SERVER」を利用するが、似たような情報をCakePHPの関数で取得する際は「getUri()」を使用する。取得出来る値は一致するものもあるが、違うものもあり便利な使い方もある。
-
-
CakePHP3でassociatedを使って関連データをまとめて保存する方法(hasOne、hasMany、belongsTo)
CakePHP3で関連データをまとめて保存する方法。hasOne、hasMany、belongsTo等の関連データはassociatedを追加することでまとめて保存することができます。
-
-
CakePHP3のメール送信の処理・テンプレート使用・添付ファイル送信も解説
CakePHP3からメールを送信する方法解説。基本的な記述方法を基にして、テンプレートを使う方法、ファイルを添付する方法へと拡張しながら解説。
-
-
CakePHP3、CakePHP4のキャッシュをクリアする方法「bin/cake cache clear_all」を使う
CakePHP3、CakePHP4では処理を高速化する手法の一つとしてキャッシュを利用している。しかし、その情報は元の情報を更新しても反映されない場合がある。そんなときはキャッシュを削除する必要がある。
-
-
CakePHP3でPHPExcelを使ってエクセルファイルを生成、出力する方法
CakePHP3でPHPExcelを利用してエクセルを編集、出力するサンプルソース+解説。PHPExcelのインストール方法の解説からファイル保存とダウンロードの方法なども解説。
-
-
CakePHP3でDocumentRootやtmp、webroot、logsなどのフォルダへのパスの定数
CakePHP3で特定フォルダのパスの定数を解説。root、DocumentRoot、app、config、webroot、tests、tmp、cache、vendor、コア、コアの srcが設定済み。realpath()関数を使うと柔軟なパス指定が可能。
-
-
CakePHP3でユーザ定義の定数、変数を設定し、読み込む方法解説
CakePHP3で定数や共通で使う変数をまとめて設定し、プログラム内で読み込む方法を、bootstrap.phpに直接記述する方法と定数ファイルを分ける方法の3つの方法で解説。
-
-
CakePHP4、5の認証処理で認証が通らない際の確認方法と確認箇所の紹介
CakePHP4、5系の認証処理でログイン認証が通らない場合の確認方法、確認箇所を解説。ログ出力し、ステータスを確認するが、ステータスの内容も紹介。それはそのままusernameを変更する際のポイントでもある。
-
-
CakePHP3の検索プラグイン「friendsofcake/search」の設置方法・CakePHP3.6対応
CakePHP3で検索を担うプラグイン「friendsofcake/search」の紹介。基本的な設置方法の紹介のほか、処理の記述方法のバリエーション、エラーの解説など。CakeDC/searchより導入は簡単!