Unix timestamp là gì? Epoch giây từ 1970 và cách chuyển đổi【2026】

(Cập nhật: 19 tháng 7, 2026 ) Unix timestamp epoch giây Date.now API log chuyển đổi thời gian
Kết luận

Unix timestamp = số giây (epoch) kể từ 1970-01-01 00:00:00 UTC. Không mang sẵn “giờ Hà Nội” bên trong. Debug API/log: nhận diện giây vs mili giây, chuyển sang ngày đọc được, rồi mới nghĩ timezone. Chuyển nhanh bằng Unix Timestamp Kawa (epoch giây ↔ ngày giờ, hiện timestamp hiện tại). Cần trần int32 / 2038 / JWT exp dài → bài 2038 & UTC+7.

Log backend in created_at: 1720000000. JWT claim exp: 1720086400. Bảng Postgres EXTRACT(EPOCH FROM …). Cùng một ý: một số nguyên trỏ tới một khoảnh khắc — nhưng mắt người không đọc được số đó.

Góc bài này: Unix timestamp là gì theo nghĩa epoch giây, cách phân biệt đơn vị, và quy trình chuyển đổi hàng ngày khi đọc API/log. Không đào sâu overflow 2038 (đã có bài riêng) — ở đây xây nền tảng để không nhầm Date.now() với time().

Bài viết này giúp bạn

  • Định nghĩa epoch và vì sao hệ thống thích lưu số giây
  • Nhận diện giây (≈10 số) vs milli (≈13 số) trong 5 giây
  • Chuyển số → ngày và ngày → số (JS + tool)
  • Tránh 5 lỗi phổ biến khi freelance / outsource debug timezone
  • Biết khi nào mở công cụ chuyển đổi thay vì viết script tạm

Unix timestamp (epoch) là gì?

Unix timestamp (còn gọi POSIX time, epoch time) là số đo:

Số giây đã trôi kể từ 1970-01-01 00:00:00 UTC

Ví dụ cố định để nhớ:

Epoch giâyUTC (xấp xỉ)
01970-01-01 00:00:00
16094592002021-01-01 00:00:00
17200000002024-07-03 10:26:40

Cùng 1720000000 trên server Việt Nam, server EU, hay laptop bạn — đều là cùng một khoảnh khắc tuyệt đối. Chuỗi "03/07/2024 17:26" thì phụ thuộc format ngày và múi giờ người đọc.

Vì sao dùng số giây thay vì chuỗi ngày?

  1. So sánh / sắp xếp — số nguyên so sánh nhanh hơn parse "19/07/2026"
  2. Không phụ thuộc locale — tránh nhầm DD/MM và MM/DD
  3. Tính khoảng cáchexp - now ra giây còn lại của token
  4. Trao đổi API — JSON number ổn định giữa ngôn ngữ

Chuỗi ISO-8601 (2026-07-19T08:00:00Z) cũng tốt cho API hiện đại; epoch vẫn cực phổ biến trong log cũ, JWT, Redis TTL, và nhiều webhook.


Giây vs mili giây — điểm hay gãy nhất

Hai đơn vị epoch thường gặp
Đơn vị Độ dài gần đúng (2020s) Nguồn điển hình
Giây ~10 chữ số PHP time(), nhiều JWT exp, Unix date +%s, cột epoch giây
Mili giây ~13 chữ số JavaScript Date.now(), một số API Node/Java, analytics
// JS lưu mili giây bên trong Date
const ms = Date.now();                 // 13 chữ số
const sec = Math.floor(ms / 1000);     // 10 chữ số — epoch giây

// SAI: coi giây như milli
new Date(1720000000);                  // ~1970 (thiếu *1000)

// ĐÚNG khi input là giây
new Date(1720000000 * 1000);           // ngày 2024-07-03 UTC

Quy tắc bỏ túi: số trông như năm 1970 khi bạn expect 2024 → thiếu * 1000. Số ra năm 50_000+ → bạn vừa nhân thêm lần nữa hoặc đang coi milli là giây.

Công cụ Unix Timestamp của Kawa làm việc với epoch giây: nhập số giây → xem ngày giờ; chọn datetime → ra số giây; dòng “Timestamp hiện tại” cũng là giây. Nếu bạn đang cầm Date.now(), chia 1000 trước khi dán.


Quy trình chuyển đổi khi đọc log / API

A. Có số → cần ngày đọc được

  1. Đếm chữ số / ước lượng đơn vị
  2. Chuẩn hóa về giây nếu tool/spec dùng giây
  3. Chuyển và đọc kết quả (ưu tiên hiểu UTC trước)
  4. Chỉ khi cần báo cáo cho user VN mới format Asia/Ho_Chi_Minh (+7) ở lớp hiển thị

Ví dụ nhanh với tool: mở /vi/tools/unix-timestamp/, dán 1609459200, nhấn chuyển đổi — đối chiếu với 2021-01-01 UTC (giờ local máy bạn có thể hiện +7).

B. Có ngày giờ → cần số gửi API

  1. Đọc spec: exp là giây hay milli?
  2. Chọn datetime (lưu ý datetime-local theo TZ máy)
  3. Lấy epoch giây từ tool hoặc Math.floor(Date.parse(iso) / 1000)
  4. Nếu API cần milli: nhân 1000

Case study 1 — Token “hết hạn ngay”

Freelance nhận JWT exp 10 chữ số. Code so sánh với Date.now() (13 chữ số) → luôn “expired”. Sửa: Date.now()/1000 hoặc nhân exp * 1000 một phía thống nhất. Năm phút với tool xác nhận exp ra đúng ngày nghiệp vụ trước khi đổ lỗi cho auth server.

Case study 2 — Log CloudWatch lệch 7 giờ trong đầu

Epoch đúng UTC. Team VN đọc số đã convert theo local và nghĩ server “sai 7 giờ”. Checklist: giữ epoch UTC trong DB; chỉ +7 khi in ra UI/log tiếng Việt. Đừng cộng 7 giờ vào số rồi lưu lại.


Bảng tham chiếu nhanh

Tình huốngViệc nên làm
Đọc iat / exp JWTCoi là giây trừ khi docs nói milli
Date.now() trong Node/browserMilli — chia 1000 khi nói chuyện với API epoch giây
Redis EXPIRE / TTLThường giây
Cột MySQL INT lưu epoch xaCảnh báo trần 2038 — xem bài 2038
So sánh hai timestampCùng đơn vị trước khi trừ

Năm dòng JS đáng bookmark

const nowSec = () => Math.floor(Date.now() / 1000);
const secToDate = (s) => new Date(s * 1000);
const dateToSec = (d) => Math.floor(d.getTime() / 1000);
const isProbablyMs = (n) => String(Math.trunc(Math.abs(n))).length >= 13;
const toSec = (n) => (isProbablyMs(n) ? Math.floor(n / 1000) : n);

isProbablyMs là heuristic — luôn ưu tiên spec API hơn độ dài chữ số.


Dùng công cụ Kawa thế nào (đúng với UI)

  1. Mở Unix Timestamp — không cần đăng ký
  2. Timestamp → Thời gian: dán epoch giây → Chuyển đổi
  3. Thời gian → Timestamp: chọn datetime → nhận epoch giây
  4. Nhìn Timestamp hiện tại để đối chiếu nhanh với log vừa copy

Tất cả chạy trong trình duyệt. Phù hợp dán số từ log nội bộ; vẫn tránh dán JWT đầy đủ lên dịch vụ lạ nếu payload nhạy cảm — với tool local thì rủi ro thấp hơn upload server bên thứ ba.


5 lỗi hay gặp (và cách tránh)

  1. Nhầm giây / milli — checklist chữ số + một lần convert thử
  2. new Date(sec) thiếu *1000 — luôn nhân khi input là giây
  3. Tin giờ local là “UTC đã convert” — đọc UTC trước đã
  4. Cộng +7 vào epoch rồi lưu — chỉ +7 lúc format
  5. Viết script một lần rồi quên — với số lẻ, tool 10 giây rẻ hơn debug nửa giờ

Liên hệ với vấn đề 2038 (chỉ định hướng)

Epoch giây trong int32 signed không vượt quá 2_147_483_647 (~2038-01-19 UTC). Hệ 64-bit / BIGINT / timestamptz hiện đại thường ổn. Nếu bạn đang thiết kế cột lưu hạn 20 năm hoặc JWT rất dài — đọc Unix timestamp 2038 và giờ Việt Nam. Bài bạn đang đọc dừng ở định nghĩa epoch giây + chuyển đổi đúng đơn vị.


Tóm tắt

  • Unix timestamp chuẩn thực hành = epoch giây từ 1970-01-01 UTC
  • Phân biệt 10 số (giây) / 13 số (milli) trước mọi phép tính
  • JS Date dùng milli → nhân/chia 1000 có chủ đích
  • Tool Kawa = chuyển epoch giây ↔ ngày + hiện now (giây)
  • Overflow 2038 / UTC+7 sâu → bài riêng

Liên kết liên quan