2023年5月22日 星期一

AdonisJs時間戳怎麼老是早八小時

在AdonisJs裏面時間物件預設是使用luxon的DateTime,但使用上你會發現時間會跟現實差時區的八小時(小編人在台灣GM+8),解決辦法就是在環境變數上加上TZ變數(注意不是TimeZone),

// .env
TZ=Asia/Taipei

只需要這樣,程式碼跟設定都無需做任何改動,你就會發現created_at跟updated_at都回到正常時間了。
但是!沒錯別這麼快走,上面說到只有created_at跟updated_at,可能底層有針對這兩個變數做特別處理,所以會特別順利。
如果你有自行設置其他datetime欄位或timestamp欄位,例如小編昨天新增了一個sent_at欄位,結果就不會如預期,還是差八小時,那這問題到底在哪呢?
經過思考後我想起,在db的設置上似乎也有timezone的設置,雖然不知道有沒有關係但就姑且一試吧。

mysql: {
client: "mysql",
connection: {
host: Env.get("MYSQL_HOST"),
port: Env.get("MYSQL_PORT"),
user: Env.get("MYSQL_USER"),
password: Env.get("MYSQL_PASSWORD", ""),
database: Env.get("MYSQL_DB_NAME"),
        // 加入 timezone,取自.env TZ
timezone: Env.get("TZ"),
},
// ...略
},

再來測試一下,竟然過了!太棒了下班!這幾天遇到的雷都還不算很大啊~

沒有留言:

張貼留言