當處理到日期與時間時,特別要注意的地方就是時區,由於後端資料庫中的時區跟使用者的不一定相同,所以我們統一日期時間的處理方式。
一般來說,日期時間有以下幾種表示方式:
A. 缺少時區資訊,不同地區會代表不同的絕對時間
2021-02-01 12:00:00
B. 帶有時區資訊,時區可依照系統或是瀏覽器設定進行推移
2021-02-01 12:00:00+00:00
C. 時間戳,代表從 1970-01-01 00:00:00+00:00 到現在的秒數
1643132323
除了 A. 之外,其他都可以儲存到正確的時區資訊,也就是絕對時間,前端瀏覽器如果要顯示當地時間可以將後端拿回來的時間進行推移即可。至於我們團隊為了同時保有可讀性跟可靠性,採用 B. 也就是 ISO8601 的格式規範,資料庫中一律儲存帶有時區資訊的日期時間格式,然後再前端透過 moment.tz / dayjs.tz 轉換成當地時間,這邊也提醒讀者,timezone 相關套件需要數年定期更新,因為日光節約是由當地政府手動進行調整的,moment 目前只有 1970-2030,不過 dayjs 會自動去抓更新就是了。