前提知識
・NOW()(MySQLの関数)
・セッションのtime_zone
・「セッションのTZで返る」→ session tz=UTC なのでそりゃUTC
・now()(Laravelのヘルパ / Carbon)
・config(‘app.timezone’)
・Laravel が app.timezone(=Asia/Tokyo) を使うのでそりゃJST
Code
|
1 2 |
'created_at' => DB::raw("COALESCE(created_at, ?)", [now()->format('Y-m-d H:i:s')]), 'updated_at' => now(), |
updateOrInsert は更新時も値を適用するので、created_at はCOALESCEで初回値を保持(now() だけだと再アクセスで上書きされる)updated_at は毎回更新でOK。NOW()(UTC) と now()(JST) は基本混在させない。JSTで保存したいなら、書き込みにDB側時刻関数であるNOW()/CURRENT_TIMESTAMP/useCurrent()を使わないのが良いので、タイムゾーンのズレには注意すること。
参考
- https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_now
- https://laravel.com/docs/helpers#method-now
Was this helpful?
0 / 0
1989年生まれのSRE 。ホスティングから大規模なアドテクなどのインフラエンジニアとして携わる。 現在はサービスの信頼性向上、DevOps、可用性、レイテンシ、パフォーマンス、モニタリング、オブザーバビリティ、 緊急対応、AWSでのインフラ構築、Docker開発環境の提供、IaC、新技術の検証、リファクタリング、セキュリティ強化を担当している。
個人事業主では数社サーバー保守とベンチャー企業のインフラコンサルティングを行うほか、TechBullを創業し、ジュニアエンジニアのコミュニティを運営している。さらに、エンジニア向けYouTubeメディア「TECH WORLD」ではSRE関連の動画に出演し、過去には脆弱性スキャナ「Vuls」のOSS活動にも貢献。 ガジェット系エンジニアYouTuberとしても発信。