エス技研

WordPress、CakePHP、PHP、baserCMSなどの Web系システムを中心に情報を提供します!


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行目辺りにあります。)
 

 
上記の記述は CakePHP3系、CakePHP4系、CakePHP5系のいずれにもありますので、CakePHP4だけではなく、CakePHP3、CakePHP5でも同様に「2999-12-31」までかと思います。
 
 
また、MySQLの「date型」の最大値は「9999-12-31」ですので、「date型」項目のバリデーションをオリジナルで「9999-12-31」まで対応できるように変更すれば CakePHPでも「9999-12-31」まで扱えるようになるでしょう。
 
 

CakePHP4の関連記事

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」に関する記事一覧
 
 

 - CakePHP 3.x 4.x 5.x

GoogleAdwords

GoogleAdwords

最後までお読みいただきましてありがとうございます。
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!

Message

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

下記の空欄を埋めてください。 * Time limit is exhausted. Please reload CAPTCHA.

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

※入力いただいたコメントは管理者の承認後に掲載されます。

  関連記事

CakePHP 2.3 Model、Controllerの見たい変数の中身をログ出力

CakePHPの Modelや Controllerの変数の中身をログとして出力して見る方法を提供します。

CakePHP5系でDeprecatedを回避しfindListでキーと値のカラムを指定して取得する方法
CakePHP5系でDeprecatedを回避しfindListでキーと値のカラムを指定して取得する方法

CakePHP4のfindListでキーと値のカラムを指定してテーブルにアクセスする方法がCakePHP5では「Deprecated(非推奨)」となった。推奨の記述方法を解説。

CakePHPで favicon.icoやapple-touch-icon-144-precomposed.pngが could not be foundのエラーが出るときの対処方法
CakePHPで favicon.icoやapple-touch-icon-144-precomposed.pngが could not be foundのエラーが出るときの対処方法

CakePHPで「CakeDC/Users」などルーティングを行うプラグインを利用するときに、favicon.icoやapple-touch-icon-144-precomposed.pngがNotFoundエラーになることがある。その対処方法の解説。

CakePHP3のユーザ管理・認証プラグイン CakeDC/Usersの導入・機能解説・3.1.5対応
CakePHP3のユーザ管理・ログイン認証プラグインCakeDC/Usersのインストール解説・3.6以降対応

CakePHP3のユーザ管理プラグイン Usersは、ユーザ登録、メール認証、ログイン認証、ユーザ管理、権限管理、reCAPTCHAなど会員制のサイトを簡単に実現可能。その導入方法、カスタマイズ方法を解説。

CakePHP3のプラグイン「CakeDC/Users」を日本語化・翻訳ファイルもダウンロード可
CakePHP3のプラグイン「CakeDC/Users」を日本語化・翻訳ファイルもダウンロード可

CakePHP3のユーザ管理、ログイン認証プラグインである「CakeDC/Users」のメッセージを日本語にする手順の解説とともに、日本語の翻訳ファイルを提供。ファイルを設置すれば日本語になる!

MySQL、CakePHP 2.3で「tinyint(1)」の Boolean型の動作を再確認

MySQL+CakePHPの環境で「tinyint(1)」を利用する際の動作を検証。「tinyint(1)」の Boolean型について CakePHPでは自動処理が実施されていることを確認しました。

CakePHP4、CakePHP5系の認証処理でログインの有無の確認、ユーザ情報の取得の方法
CakePHP4、CakePHP5系の認証処理でログインの有無の確認、ユーザ情報の取得の方法

CakePHP4系、5系のログイン認証の可否のチェック、および、ログインユーザの情報を取得する方法のまとめ。複数の方法があるが手続きが微妙に異なるためまとめてみた。

CakePHP4のCakeDC/Usersの Usersへの接続、バリデーションのカスタマイズ方法解説
CakePHP4のCakeDC/Usersの Usersへの接続、バリデーションのカスタマイズ方法解説

CakeDC謹製Usersプラグインの紹介。CakePHP4で使う場合のUsersのカスタマイズとして入力項目のバリデーションの変更を、プラグインのファイルは触らずオーバーライドにより実装する方法を解説する。

CakePHP 2.3で確認画面付きのお問い合わせフォームの作り方

CakePHPで確認画面付きのお問い合わせフォーム、メールフォームの作り方をサンプルを提示しながら解説。

CakePHP4でcontrollerで実行したバリデーションエラーをmodelのにマージする方法
CakePHP4でcontrollerで実行したバリデーションエラーをmodelのにマージする方法

CakePHP4でcontrollerで実行したバリデーションの結果をModelのバリデーション結果に追加するメソッド「setError()」「setErrors()」の使い方の解説。