在 PHP 中調整時區

前言

如果你是用 PHP 作為你的程式語言,不管你是用在網頁或是其他地方,你可能偶爾會遇到這樣的問題:當程式上了主機,在時間上可能跟你在自己的電腦上跑出來的結果不同。這是因為你無法保證主機商上的時間跟你的電腦是使用同一個時區,尤其是買其他國家的主機更為明顯。

因此我推薦的作法,就是當你有固定某種時區的需求時,就預先在系統或是程式內定義好想使用的時區,而這篇文章就是記下如何定義。

更改 php.ini

若你的權限足夠,你可以直接選擇編輯主機上的 php.ini,這可以使你不需要在程式碼內定義一次。

舉例來說,我常使用 Nginx 搭配 php-fpm 來使用 PHP。通常 php.ini 會位於 /etc/php/8.2/fpm/ 裡面,而路徑中的 8.2 則是我使用的 PHP 版本。

sudo vim /etc/php/8.2/fpm/php.ini

找到 [Date] 之後,你應該會看到 date.timezone = 未被定義,我們需要取消註解他,並給他一個時區,以下以台北為例。

[Date]
; Defines the default timezone used by the date functions
; https://php.net/date.timezone
date.timezone = "Asia/Taipei"

完成之後,我們要重啟這個 php-fpm,如果版本是 8.2 就這樣下:

sudo systemctl restart php8.2-fpm

程式碼定義

但如果說你的權限不夠,那我們就只能選擇在 PHP 的程式碼來定義。在程式碼的開頭新增以下內容,以下以台北時間作為範例:

<?php
    date_default_timezone_set("Asia/Taipei");
?>

這樣就可以在不改變主機設定的情況下,使 PHP 照著你想要的時區運作囉。