Unix 時間戳程式碼片段

可直接使用的程式碼,用於在 9 種程式語言和資料庫中處理 Unix 時間戳。涵蓋取得當前時間戳、轉換為日期以及格式化輸出。

關於這些程式碼範例

所有範例都用 1700000000 作為秒級 Unix 時間戳範例,對應 2023 年 11 月 15 日 06:13:20 UTC。請替換為你自己的時間戳。展示毫秒的範例使用 1700000000000(同一時刻 × 1000)。

各語言的秒與毫秒

最常見的錯誤是混淆秒與毫秒。請使用此速查表:

  • 毫秒(× 1000):JavaScript Date.now()、Java System.currentTimeMillis()、C# DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()
  • 秒(與 JS 比較需 ÷ 1000):Python time.time()、PHP time()、Go time.Now().Unix()、Ruby Time.now.to_i、Rust SystemTime::now().as_secs()
  • SQL:MySQL UNIX_TIMESTAMP() → 秒;PostgreSQL EXTRACT(EPOCH) → 帶小數部分的秒

如何安全地使用這些片段

每個片段都刻意保持短小,便於複製到主控台、遷移指令稿、測試或 API 處理函式中。在正式環境使用某個值前,請在時間戳離開你程式碼的邊界處確認其預期單位。許多 bug 都發生在一個服務送出毫秒、而另一個服務未轉換就以秒儲存時。

  • 對於瀏覽器與前端程式碼,除非 API 文件另有說明,否則預期為毫秒
  • 對於後端程式碼、日誌與 shell 工具,通常預設是 Unix 秒
  • 對於資料庫篩選,請在所有列與索引中保持單位一致
  • 對於格式化輸出,優先使用 UTC 或顯式的 IANA 時區,而非伺服器預設值

選擇單一可信來源

當多個服務都涉及同一事件時間時,選定一種表示作為可信來源(source of truth),並在邊界處轉換。例如後端可儲存 Unix 秒,前端可乘以 1000 用於 Date,報表則把同一時刻格式化為 UTC 或業務時區。