Unix timestamp là gì? Epoch giây từ 1970 và cách chuyển đổi【2026】
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ây | UTC (xấp xỉ) |
|---|---|
0 | 1970-01-01 00:00:00 |
1609459200 | 2021-01-01 00:00:00 |
1720000000 | 2024-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?
- So sánh / sắp xếp — số nguyên so sánh nhanh hơn parse
"19/07/2026" - Không phụ thuộc locale — tránh nhầm DD/MM và MM/DD
- Tính khoảng cách —
exp - nowra giây còn lại của token - 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
| Đơ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
- Đếm chữ số / ước lượng đơn vị
- Chuẩn hóa về giây nếu tool/spec dùng giây
- Chuyển và đọc kết quả (ưu tiên hiểu UTC trước)
- 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
- Đọc spec:
explà giây hay milli? - Chọn datetime (lưu ý
datetime-localtheo TZ máy) - Lấy epoch giây từ tool hoặc
Math.floor(Date.parse(iso) / 1000) - 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ống | Việc nên làm |
|---|---|
Đọc iat / exp JWT | Coi là giây trừ khi docs nói milli |
Date.now() trong Node/browser | Milli — chia 1000 khi nói chuyện với API epoch giây |
Redis EXPIRE / TTL | Thường giây |
Cột MySQL INT lưu epoch xa | Cảnh báo trần 2038 — xem bài 2038 |
| So sánh hai timestamp | Cù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)
- Mở Unix Timestamp — không cần đăng ký
- Timestamp → Thời gian: dán epoch giây → Chuyển đổi
- Thời gian → Timestamp: chọn datetime → nhận epoch giây
- 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)
- Nhầm giây / milli — checklist chữ số + một lần convert thử
new Date(sec)thiếu*1000— luôn nhân khi input là giây- Tin giờ local là “UTC đã convert” — đọc UTC trước đã
- Cộng +7 vào epoch rồi lưu — chỉ +7 lúc format
- 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
Datedù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