← Tất cả bài viết

Unix timestamp là gì và cách chuyển đổi sang ngày giờ

22/07/2026

Unix timestamp (còn gọi epoch time) là số giây trôi qua kể từ nửa đêm 1/1/1970 UTC. Đây là cách biểu diễn thời gian phổ biến nhất trong lập trình vì nó chỉ là một con số nguyên, không phụ thuộc định dạng hiển thị hay múi giờ.

Giây hay mili-giây?

Đây là nguồn lỗi số một. Unix time chuẩn tính bằng giây (10 chữ số cho thời điểm hiện tại), còn Date.now() của JavaScript và System.currentTimeMillis() của Java trả về mili-giây (13 chữ số). Nhân/chia 1000 khi chuyển giữa hai hệ.

Date.now();                 // 1784434184257 (ms)
Math.floor(Date.now()/1000) // 1784434184   (s)
new Date(1784434184257);    // đối tượng Date

Timestamp luôn là UTC

Bản thân timestamp không mang múi giờ — nó luôn tính theo UTC. Múi giờ chỉ xuất hiện khi bạn hiển thị. Nguyên tắc vàng: lưu UTC trong database, chỉ đổi sang giờ địa phương ở tầng giao diện.

Trong database

  • PostgreSQL: ưu tiên timestamptz (lưu UTC, tự xử lý múi giờ) hơn timestamp trơn
  • Chuyển sang epoch: EXTRACT(EPOCH FROM now())
  • Từ epoch về timestamp: to_timestamp(1784434184)

Sai lầm kinh điển là lưu timestamp không múi giờ rồi mỗi server hiểu một kiểu, dẫn tới lệch vài giờ khi deploy ở vùng khác.

👉 Dùng thử công cụ liên quan trên dev-hub: Timestamp Converter — chạy hoàn toàn trong trình duyệt, không gửi dữ liệu lên server.