0
1

More than 3 years have passed since last update.

Herokuでデプロイ後、日時表示がUTCになってしまう(time_zoneの設定)

Last updated at Posted at 2021-02-16

環境

Mac
PHP 7.3.24
ClearDB MySQL(MySQL Workbenchで操作)
Heroku(本番環境)

現状

・Heroku clearDB MySQLにおいてデフォルトでUTCで保存されている
・デプロイをしてから、本番環境でUTC表示になってしまった(ローカル環境で使用している時は日本時間で表示されていた)

実現したいこと

・投稿した際に、日本時間で表示させる
・発生している9時間の時差を解決する方法を知りたい

調べたこと

・clearDB MySQLでデフォルト設定されているUTCは変更できない。(自動的にUTCで保存されてしまう)
・PHPプログラムで実装する方法が良さそう

試したこと

・php.ini、HerokuのtimezoneをAsia/Tokyoに変更

・date_default_timezoneを使用。効果なし。これで、データ登録の際に、日本時間で登録してくれると思っていた。(取り扱うデータベースによってはこの方法で登録できる?)

解決

接続の際に、タイムゾーンを設定することで、日本時間で登録され表示されるようになった。
解決まで1週間程費やしてしまい、遠回りしてしまいましたが改めて諦めない事って大切だなと実感いたしました笑

<?php
function connect()
{
    $db = parse_url(getenv("CLEARDB_DATABASE_URL"));
    $db['dbname'] = ltrim($db['path'], '/'); //pathのみ取り出す
    $dsn = "mysql:host={$db['host']};dbname={$db['dbname']};charset=utf8";
    $driver_options = [PDO::MYSQL_ATTR_INIT_COMMAND => "SET time_zone='+09:00'"];
    try {
        $db = new PDO($dsn, $db['user'], $db['pass'], $driver_options);
        $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    } catch (PDOException $Exception) {
        die('DB接続エラー: ' . $Exception->getMessage());
    }
    return $db;
}

参考記事&質問サイト

HerokuにデプロイしたはいいがDBはどうやって使うのだ?(ClearDBの使い方)
Herokuでデプロイ後、日時表示がUTCになってしまうので、日本時間で表示させたいです。
↓英文ですが翻訳すれば何とかなります笑
Working with Timezone in PHP PDO and MySQLPost author

他にも関連記事や参考になった記事が沢山あるのですが、混乱を避ける為に絞りました。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1