TypeORMのタイムゾーンをUTCに設定する

NO IMAGE

結論

ormconfig.jsに以下を追記する

timezone: "Z",

GitHubに上がっている公式のドキュメントに記載の通り、デフォルトは”local”になっており、ユーザのローカルのタイムゾーンが使われる。ちなみに、Zは「グリニッジ標準時<GMT>」を意味する略語。

timezone – the timezone configured on the MySQL server. This is used to typecast server date/time values to JavaScript Date object and vice versa. This can be localZ, or an offset in the form +HH:MM or -HH:MM. (Default: local)

https://github.com/typeorm/typeorm/blob/master/docs/connection-options.md#mysql–mariadb-connection-options

なぜこの対応をする必要があったのか?

データの保存先であるMySQLではタイムゾーンをUTCにしていた。この時、created_atカラムを持つテーブルのレコードを生成すると、MySQLのタイムゾーンの設定によって、日本時間よりも9時間前の時刻がcreated_atに登録される。

このレコードを、デフォルトの設定(タイムゾーンがJST)のTypeORMで取得しにいくと、更に9時間が減算され(UTCで出力しようとするため)、間違った時刻(実際よりも9時間前の時刻)になってしまう。アプリとDBでタイムゾーンに違いがあると、このような問題が起きそう。