Trình chuyển đổi Unix timestamp sang ngày
Chuyển Unix timestamp thành ngày và giờ dễ đọc — hoặc chuyển bất kỳ ngày nào trở lại Unix timestamp. Hỗ trợ giây và mili giây.
Chia sẻ công cụ này
Nhúng vào trang web của bạn
Công cụ liên quan
Unix timestamp là gì?
Unix timestamp, còn gọi là Unix time hay POSIX time, là số giây đã trôi qua kể từ 1970-01-01 00:00:00 UTC, được gọi là Unix epoch. Đây là một tiêu chuẩn được sử dụng rộng rãi trong lập trình vì nó biểu diễn một thời điểm dưới dạng một số nguyên duy nhất, giúp việc lưu trữ, so sánh và tính toán trở nên đơn giản.
JavaScript hoạt động theo milliseconds, nên Date.now() trả về Unix timestamp nhân với 1000. Nhiều API, cơ sở dữ liệu và hệ thống backend sử dụng giây thay vào đó. Công cụ này chấp nhận cả hai định dạng và tự động phát hiện giây hoặc milliseconds dựa trên số lượng bạn nhập.
Các Unix timestamp đáng chú ý
| Timestamp | Ngày (UTC) | Ghi chú |
|---|---|---|
0 | 1970-01-01 00:00:00 | Unix epoch |
1,000,000,000 | 2001-09-09 01:46:40 | 1 tỷ giây |
2,000,000,000 | 2033-05-18 03:33:20 | 2 tỷ giây |
2,147,483,647 | 2038-01-19 03:14:07 | Vấn đề năm 2038 (giá trị tối đa 32-bit) |
Tại sao lại là 1970?
Unix epoch ngày 1 tháng 1 năm 1970 được chọn một phần theo quy ước và một phần do những hạn chế thực tế. Unix được phát triển vào cuối những năm 1960 và đầu những năm 1970 tại Bell Labs. Các nhà phát triển cần một ngày bắt đầu gần đây và tròn trịa cho cách biểu diễn thời gian của họ. Ngày 1 tháng 1 năm 1970 vừa gần đây đủ để áp dụng thực tế và không có ý nghĩa kỹ thuật đặc biệt — nó chỉ đơn giản là một điểm mốc thuận tiện.
Các hệ thống khác có các epoch khác nhau: epoch FILETIME của Windows là ngày 1 tháng 1 năm 1601; GPS time bắt đầu từ ngày 6 tháng 1 năm 1980; epoch NTP là ngày 1 tháng 1 năm 1900. Khi chuyển đổi giữa các hệ thống, biết epoch của mỗi hệ thống là điều cần thiết.
Giây so với milliseconds
Unix timestamp ban đầu được tính bằng giây. Hầu hết các ngôn ngữ và hệ thống phía máy chủ (Unix shell, time.time() của Python, time() của PHP, hầu hết cơ sở dữ liệu) sử dụng giây. Date.now() và new Date().getTime() của JavaScript trả về milliseconds. Sự khác biệt này là nguồn lỗi phổ biến khi frontend JavaScript giao tiếp với các API backend.
Unix timestamp tính bằng giây hiện tại là một số có 10 chữ số (khoảng 1.700.000.000 tính đến năm 2023). Timestamp tính bằng milliseconds là một số có 13 chữ số. Công cụ tính toán phát hiện định dạng bạn nhập dựa trên số lượng chữ số và chuyển đổi tương ứng.
Vấn đề năm 2038
Các hệ thống lưu trữ Unix timestamp dưới dạng số nguyên có dấu 32-bit chỉ có thể biểu diễn các ngày cho đến 2,147,483,647 giây sau epoch — tức là 03:14:07 UTC vào ngày 19 tháng 1 năm 2038. Sau thời điểm đó, số nguyên có dấu 32-bit sẽ tràn thành một số âm lớn, biểu diễn một ngày vào năm 1901.
Đôi khi nó được gọi là vấn đề "Y2K38" hoặc Unix Millennium Bug. Các hệ thống 64-bit hiện đại không bị ảnh hưởng vì số nguyên có dấu 64-bit có thể biểu diễn timestamps cho khoảng 292 tỷ năm. Tuy nhiên, các hệ thống nhúng, cơ sở dữ liệu cũ và phần mềm 32-bit cũ có thể vẫn còn dễ bị tấn công. Nhiều ngành — bao gồm viễn thông, ngân hàng và hệ thống điều khiển công nghiệp — đang có các nỗ lực di chuyển liên tục để giải quyết vấn đề này.
Cách lấy Unix timestamp hiện tại
| Ngôn ngữ / môi trường | Lệnh |
|---|---|
| JavaScript | Math.floor(Date.now() / 1000) |
| Python | import time; int(time.time()) |
| PHP | time() |
| Bash | date +%s |
| SQL (PostgreSQL) | EXTRACT(EPOCH FROM NOW())::int |
| SQL (MySQL) | UNIX_TIMESTAMP() |
| Go | time.Now().Unix() |
| Rust | SystemTime::now().duration_since(UNIX_EPOCH).unwrap().as_secs() |
Ứng dụng thực tế
Phát triển API: REST API thường sử dụng Unix timestamps cho các trường created_at, updated_at và hết hạn token. Timestamp là không phụ thuộc múi giờ và rõ ràng — không giống như chuỗi ngày tháng được định dạng, phụ thuộc vào locale và quy ước định dạng.
Hết hạn token: JWT (JSON Web Tokens) sử dụng Unix timestamps cho các claim exp (hết hạn) và iat (được phát hành). Token hết hạn khi timestamp hiện tại vượt quá giá trị exp. Tính toán thời gian hết hạn — "token này nên hết hạn trong 24 giờ" — yêu cầu thêm 86.400 giây vào timestamp hiện tại.
Cache TTL: Hết hạn cache thường được đặt dưới dạng Unix timestamp hoặc số giây từ bây giờ. Gỡ lỗi các vấn đề cache thường cần chuyển đổi timestamp hết hạn được lưu trữ thành ngày dễ đọc.
Phân tích log: Server logs thường bao gồm Unix timestamps. Chuyển đổi chúng thành ngày dễ đọc là bước đầu tiên để liên kết các mục nhập log với các sự kiện thực tế.
Lưu trữ cơ sở dữ liệu: Lưu trữ timestamps dưới dạng số nguyên thay vì chuỗi được định dạng tránh lỗi chuyển đổi múi giờ và đơn giản hóa việc sắp xếp, truy vấn phạm vi và tính toán. Một truy vấn cho "tất cả các bản ghi từ 7 ngày qua" trở thành WHERE created_at > (NOW_UNIX - 604800).
Câu hỏi thường gặp
Unix timestamp là gì?
Unix timestamp là số giây đã trôi qua kể từ 00:00:00 UTC ngày 1 tháng 1 năm 1970 — một mốc tham chiếu được gọi là Unix epoch. Nó biểu diễn một thời điểm bất kỳ bằng một số nguyên duy nhất, giúp việc lưu trữ, so sánh và tính toán trở nên dễ dàng. Đây là định dạng thời gian tiêu chuẩn được dùng trong hầu hết hệ điều hành, cơ sở dữ liệu, API và ngôn ngữ lập trình.
Làm thế nào để chuyển Unix timestamp sang ngày giờ?
Nhập timestamp vào công cụ chuyển đổi, công cụ sẽ trả về ngày và giờ tương ứng theo UTC và theo múi giờ địa phương của bạn. Công cụ tự động nhận biết bạn nhập theo giây (số 10 chữ số) hay theo mili giây (số 13 chữ số). Bạn cũng có thể chuyển theo chiều ngược lại: chọn ngày và giờ để nhận Unix timestamp tương ứng.
Sự khác nhau giữa Unix time theo giây và theo mili giây là gì?
Unix timestamp nguyên bản tính theo giây. Phần lớn hệ thống phía máy chủ — PHP, Python, Go, Bash, cơ sở dữ liệu SQL — dùng giây. Date.now() và new Date().getTime() của JavaScript trả về mili giây (giây Unix × 1000). Timestamp theo giây hiện có 10 chữ số; theo mili giây có 13 chữ số. Nhầm lẫn giữa hai loại này là lỗi phổ biến khi frontend JavaScript gửi timestamp lên backend đang kỳ vọng theo giây.
Vì sao Unix time bắt đầu từ ngày 1 tháng 1 năm 1970?
Ngày này được các nhà phát triển Unix tại Bell Labs chọn vào đầu những năm 1970 như một mốc bắt đầu gần, tiện lợi. Nó không có ý nghĩa đặc biệt nào ngoài việc là một ngày “tròn” và gần thời điểm hệ thống được phát triển. Các hệ thống khác dùng các epoch khác nhau: Windows FILETIME bắt đầu từ 1/1/1601; GPS time bắt đầu từ 6/1/1980; NTP bắt đầu từ 1/1/1900.
Vấn đề Year 2038 là gì?
Các hệ thống lưu Unix timestamp dưới dạng số nguyên 32-bit có dấu chỉ có thể biểu diễn ngày đến 19 tháng 1 năm 2038 (timestamp 2.147.483.647). Sau đó, giá trị bị tràn và trở thành một số âm lớn, biểu diễn một ngày vào năm 1901. Các hệ thống 64-bit hiện đại không bị ảnh hưởng. Tuy vậy, các hệ thống nhúng cũ, cơ sở dữ liệu đời cũ và phần mềm 32-bit có thể vẫn dễ bị ảnh hưởng và cần được nâng cấp trước mốc thời gian đó.
Làm thế nào để lấy Unix timestamp hiện tại trong ngôn ngữ lập trình của tôi?
JavaScript: Math.floor(Date.now() / 1000). Python: import time; int(time.time()). PHP: time(). Bash: date +%s. PostgreSQL: EXTRACT(EPOCH FROM NOW())::int. MySQL: UNIX_TIMESTAMP(). Go: time.Now().Unix(). Tất cả đều trả về thời gian hiện tại tính theo số giây kể từ Unix epoch.