Chuyển đổi Unix timestamp: giây, mili giây, ISO 8601 và bẫy múi giờ
Công cụ đổi qua lại giữa Unix timestamp và ngày giờ, đồng thời trải kết quả ra tám định dạng thường gặp gồm giây, mili giây, ISO 8601, UTC, giờ địa phương, chỉ ngày, chỉ giờ và khoảng cách thời gian. Mỗi dòng có nút sao chép riêng để dán thẳng vào truy vấn hoặc mã nguồn.
Tính năng nổi bật
- Đổi hai chiều giữa Unix timestamp tính theo giây và ngày giờ
- Xuất đồng thời tám định dạng, không phải chuyển từng cái một
- Cho sẵn cả bản mili giây, đúng thứ mà JavaScript và nhiều API trả về
- Chuỗi ISO 8601 đầy đủ kèm hậu tố Z để dán vào JSON hay tham số truy vấn
- Dòng giờ địa phương định dạng theo cách viết ngày tháng của Việt Nam
- Dòng khoảng cách thời gian dạng bao nhiêu phút, giờ, ngày trước
- Nút lấy thời điểm hiện tại chỉ bằng một lần bấm
- Sao chép từng định dạng riêng lẻ, chạy hoàn toàn trên trình duyệt
Vì sao lập trình viên phải đổi timestamp liên tục
Máy tính lưu thời gian bằng một con số nguyên đếm giây kể từ một mốc cố định, còn con người đọc thời gian bằng ngày tháng và giờ phút. Mọi khoảng cách giữa hai cách biểu diễn đó đều là nơi lỗi sinh ra. Bạn đọc log thấy dòng 1735689600 và cần biết đó là lúc nào; bạn nhận một JWT với trường exp và cần biết còn hạn không; bạn viết truy vấn lọc bản ghi trong khoảng hai ngày và phải nhập đúng hai con số; bạn nhìn cột created_at trong cơ sở dữ liệu và ngờ ngợ nó đang ở UTC hay giờ Việt Nam. Công cụ này cho bạn cả tám cách biểu diễn cùng lúc của một thời điểm, nên thay vì đoán bạn nhìn thẳng vào dòng giờ địa phương để xác nhận, rồi sao chép đúng định dạng mà hệ thống bên kia cần.
Lợi ích khi sử dụng
- Thấy cả tám cách biểu diễn của cùng một thời điểm trong một màn hình
- Không phải nhớ hàm chuyển đổi của từng ngôn ngữ chỉ để xem một con số
- Phát hiện ngay lỗi lệch nghìn lần giữa giây và mili giây
- Sao chép đúng định dạng cần dùng thay vì gõ tay và gõ sai
- Kiểm tra nhanh hạn của token hoặc thời điểm trong log khi đang xử lý sự cố
Cách chuyển đổi timestamp
- 1Dán con số timestamp vào ô Unix Timestamp; nếu con số có 13 chữ số thì đó là mili giây, hãy bỏ ba chữ số cuối trước khi dán.
- 2Đối chiếu ngay dòng Local trong bảng kết quả để chắc chắn thời điểm đó hợp lý với ngữ cảnh bạn đang xử lý.
- 3Muốn đi chiều ngược lại thì bấm nút lấy thời điểm hiện tại rồi chỉnh con số timestamp lên xuống cho tới khi dòng Local đúng thời điểm cần.
- 4Bấm nút sao chép ở đúng dòng định dạng mà hệ thống đích yêu cầu, ví dụ ISO 8601 cho API hoặc mili giây cho mã JavaScript.
- 5Khi làm việc với khoảng thời gian, hãy lấy hiệu của hai timestamp rồi mới đổi sang ngày giờ, đừng trừ hai chuỗi ngày tháng với nhau.
Unix timestamp là gì và cách nhận biết giây hay mili giây
Unix timestamp là số giây đã trôi qua kể từ 00 giờ 00 phút 00 giây ngày 1 tháng 1 năm 1970 theo giờ UTC, mốc này gọi là epoch. Nó là một con số nguyên nên máy tính so sánh, cộng trừ và sắp xếp cực nhanh, đồng thời không mang theo bất kỳ thông tin nào về múi giờ hay định dạng hiển thị. Cách phân biệt đơn vị rất đơn giản là đếm chữ số: mốc thời gian hiện tại tính theo giây có 10 chữ số và sẽ giữ nguyên 10 chữ số cho tới tận năm 2286, còn tính theo mili giây thì có 13 chữ số. JavaScript là nguồn gây nhầm phổ biến nhất vì Date.now trả về mili giây trong khi phần lớn ngôn ngữ khác và phần lớn API trả về giây. Dấu hiệu của lỗi này rất dễ nhận: nếu bạn đổi một timestamp mà ra năm 1970 thì bạn đã đưa số giây vào chỗ cần mili giây, còn nếu ra năm hơn 50000 thì bạn đã làm ngược lại. Công cụ hiện sẵn cả hai dòng nên bạn tránh được nhóm lỗi này chỉ bằng cách nhìn.
Múi giờ: timestamp không có múi giờ, nhưng chuỗi ngày giờ thì có
Đây là nguồn gốc của gần như mọi lỗi thời gian trong ứng dụng. Bản thân timestamp là một điểm tuyệt đối trên trục thời gian, không thuộc múi giờ nào. Chỉ khi đem hiển thị nó mới cần một múi giờ, và Việt Nam ở UTC cộng 7. Vì vậy cùng một timestamp cho ra dòng UTC là 10 giờ và dòng Local là 17 giờ, cả hai đều đúng và cùng chỉ một thời điểm. Chuỗi ISO 8601 giải quyết vấn đề này bằng phần đuôi: hậu tố Z nghĩa là giờ UTC, còn dạng cộng 07 hai chấm 00 nghĩa là giờ Việt Nam có ghi rõ độ lệch. Nguy hiểm nhất là chuỗi kiểu 2026 gạch 08 gạch 13 chữ T 10 hai chấm 00 mà không có phần đuôi nào, vì mỗi hệ thống hiểu một kiểu: trình duyệt hiểu là giờ máy người dùng, còn nhiều thư viện phía máy chủ lại hiểu là UTC. Nguyên tắc an toàn là lưu trữ và truyền đi luôn bằng timestamp hoặc bằng ISO 8601 có đuôi múi giờ, chỉ đổi sang giờ địa phương ở bước cuối cùng khi hiển thị cho người xem.
Hai điểm lệch riêng của công cụ mà bạn nên biết
Điểm thứ nhất nằm ở ô Date and Time. Ô này được điền tự động theo giờ UTC để khớp với chuỗi ISO, nhưng khi bạn tự gõ hoặc chọn giá trị vào đó thì trình duyệt lại hiểu con số bạn nhập là giờ trên máy bạn. Với múi giờ Việt Nam, hai cách hiểu này lệch nhau đúng 7 tiếng. Cách dùng an toàn là nhập trực tiếp vào ô Unix Timestamp và đọc dòng Local để xác nhận, hoặc nếu đã sửa ô ngày giờ thì hãy kiểm tra lại dòng Local trước khi sao chép kết quả. Điểm thứ hai nằm ở dòng khoảng cách thời gian: công cụ luôn ghi hậu tố trước, kể cả khi mốc thời gian nằm ở tương lai. Khi bạn nhập một timestamp của ngày mai, dòng đó sẽ hiện số âm kèm chữ trước, và cách đọc đúng là hiểu số âm nghĩa là còn bấy nhiêu nữa mới tới. Hai chi tiết này không ảnh hưởng tới các dòng còn lại, và các dòng giây, mili giây, ISO 8601, UTC, Local đều chính xác.
Năm 2038, giây nhuận và những giới hạn của cách đếm giây
Nhiều hệ thống cũ lưu timestamp trong một số nguyên có dấu 32 bit, và giá trị lớn nhất của kiểu đó là 2147483647, tương ứng 03 giờ 14 phút 07 giây UTC ngày 19 tháng 1 năm 2038. Qua thời điểm đó con số tràn về âm và hệ thống hiểu thành năm 1901, vấn đề này được gọi là sự cố năm 2038. Phần mềm hiện đại dùng số nguyên 64 bit nên không còn giới hạn thực tế, nhưng thiết bị nhúng, hệ thống ngân hàng cũ và các cột kiểu TIMESTAMP trong MySQL vẫn nằm trong diện phải kiểm tra. Một chi tiết ít người biết khác là Unix time cố tình bỏ qua giây nhuận: khi thế giới chèn thêm một giây nhuận vào cuối năm, đồng hồ Unix không tăng thêm mà lặp lại hoặc nhảy giá trị. Hệ quả là hiệu của hai timestamp không phải số giây vật lý tuyệt đối, sai lệch tổng cộng là vài chục giây tính từ năm 1972. Với ứng dụng thông thường thì sai lệch này không đáng kể, nhưng với hệ thống đo lường chính xác cao thì phải dùng thang thời gian khác.
Timestamp trong cơ sở dữ liệu, log và Excel
Trong MySQL, kiểu TIMESTAMP lưu giá trị theo UTC rồi tự quy đổi theo múi giờ của phiên kết nối, phạm vi bị giới hạn trong khoảng từ năm 1970 tới 2038. Kiểu DATETIME thì lưu nguyên văn con số ngày giờ, không quy đổi gì cả và cũng không mang múi giờ, phạm vi rộng hơn nhiều. Chọn nhầm giữa hai kiểu này là nguyên nhân của rất nhiều báo cáo lệch bảy tiếng khi máy chủ và máy trạm khác múi giờ. Trong JWT, hai trường iat và exp đều là Unix timestamp tính theo giây, nên khi so hạn token trong JavaScript bạn phải nhân 1000 trước khi so với Date.now. Excel lại đếm theo một cách hoàn toàn khác: nó lưu ngày là số ngày kể từ mốc riêng của nó, phần thập phân là giờ trong ngày. Muốn đổi từ Unix timestamp sang số ngày của Excel, bạn lấy timestamp chia 86400 rồi cộng 25569, sau đó định dạng ô về kiểu ngày giờ. Cần lưu ý Excel còn giữ một lỗi lịch sử là coi năm 1900 là năm nhuận, nên mọi phép so ngày trước tháng 3 năm 1900 đều lệch một ngày.
Câu hỏi thường gặp (FAQ)
Unix timestamp là gì?
Là số giây đã trôi qua kể từ 00 giờ 00 phút 00 giây ngày 1 tháng 1 năm 1970 theo giờ UTC, mốc gọi là epoch. Vì là số nguyên nên máy tính so sánh và sắp xếp rất nhanh. Bản thân nó không mang thông tin múi giờ, chỉ khi hiển thị mới cần chọn múi giờ.
Làm sao biết timestamp đang tính theo giây hay mili giây?
Đếm chữ số. Timestamp hiện tại tính theo giây có 10 chữ số, tính theo mili giây có 13 chữ số. Nếu đổi ra mà kết quả rơi vào năm 1970 thì bạn đã đưa số giây vào chỗ cần mili giây; nếu ra một năm rất xa thì bạn làm ngược lại.
Vì sao dòng UTC và dòng Local lệch nhau 7 tiếng?
Vì Việt Nam ở múi giờ UTC cộng 7. Cả hai dòng cùng chỉ một thời điểm, chỉ khác cách quy chiếu. Khi trao đổi dữ liệu giữa các hệ thống nên dùng UTC hoặc chuỗi ISO có ghi rõ độ lệch, chỉ đổi sang giờ Việt Nam ở bước hiển thị cuối cùng.
ISO 8601 khác gì so với chuỗi ngày giờ thường?
ISO 8601 quy định thứ tự năm, tháng, ngày rồi tới giờ, và đặc biệt là có phần đuôi múi giờ: hậu tố Z nghĩa là UTC, dạng cộng 07 hai chấm 00 nghĩa là giờ Việt Nam. Nhờ phần đuôi này mà chuỗi không bị hiểu sai khi đi qua nhiều hệ thống.
Vì sao ô Date and Time trong công cụ lệch 7 tiếng khi tôi tự sửa?
Vì ô đó được điền theo giờ UTC để khớp chuỗi ISO, nhưng khi bạn tự nhập thì trình duyệt hiểu giá trị là giờ máy bạn. Cách an toàn là nhập vào ô Unix Timestamp rồi đọc dòng Local để xác nhận, hoặc kiểm tra lại dòng Local sau khi sửa ô ngày giờ.
Vì sao dòng khoảng cách thời gian hiện số âm kèm chữ trước?
Vì công cụ luôn gắn hậu tố trước, kể cả với thời điểm ở tương lai. Số âm ở đó nghĩa là còn bấy nhiêu nữa mới tới thời điểm đó. Các dòng còn lại như giây, mili giây, ISO 8601, UTC và Local đều không bị ảnh hưởng.
Sự cố năm 2038 là gì?
Số nguyên có dấu 32 bit chứa được tối đa 2147483647, tương ứng 03 giờ 14 phút 07 giây UTC ngày 19 tháng 1 năm 2038. Qua mốc đó giá trị tràn về âm và hệ thống hiểu thành năm 1901. Phần mềm dùng số nguyên 64 bit thì không bị, nhưng thiết bị nhúng và cột TIMESTAMP của MySQL vẫn cần kiểm tra.
Nên lưu thời gian trong cơ sở dữ liệu bằng kiểu nào?
Nếu cần chính xác về múi giờ, hãy lưu bằng timestamp hoặc kiểu có quy đổi múi giờ và luôn chuẩn hóa về UTC. Trong MySQL, TIMESTAMP quy đổi theo múi giờ phiên nhưng giới hạn tới năm 2038, còn DATETIME lưu nguyên văn và không mang múi giờ nên dễ gây lệch nếu máy chủ đổi cấu hình.
Kiểm tra hạn của JWT bằng timestamp thế nào?
Trường exp trong JWT là Unix timestamp tính theo giây. Trong JavaScript, hãy nhân exp với 1000 rồi so với Date.now vì hàm này trả về mili giây. Dán exp vào công cụ và đọc dòng Local là cách nhanh nhất để biết token hết hạn lúc nào theo giờ Việt Nam.
Đổi Unix timestamp sang ngày tháng trong Excel thế nào?
Lấy timestamp chia cho 86400 rồi cộng 25569, sau đó định dạng ô về kiểu ngày giờ. Excel đếm ngày theo mốc riêng của nó chứ không dùng epoch, và còn giữ lỗi lịch sử coi năm 1900 là năm nhuận nên các phép so ngày rất cũ có thể lệch một ngày.
Giây nhuận có ảnh hưởng tới timestamp không?
Unix time cố tình bỏ qua giây nhuận: khi thế giới chèn thêm một giây, đồng hồ Unix lặp lại hoặc nhảy giá trị thay vì tăng thêm. Vì vậy hiệu của hai timestamp không phải số giây vật lý tuyệt đối, lệch tổng cộng vài chục giây tính từ năm 1972, mức không đáng kể với ứng dụng thông thường.
Dữ liệu tôi nhập vào có được gửi đi đâu không?
Không. Toàn bộ việc chuyển đổi chạy bằng JavaScript ngay trên trình duyệt của bạn, kể cả phần định dạng theo giờ Việt Nam. Không có yêu cầu mạng nào được gửi đi khi bạn nhập timestamp, và không có lịch sử nào được lưu lại sau khi đóng tab.
Từ khóa liên quan
- chuyển đổi unix timestamp
- timestamp converter online
- epoch converter
- đổi timestamp sang ngày giờ
- unix timestamp là gì
- timestamp giây hay mili giây
- iso 8601 là gì
- múi giờ utc+7 việt nam
- sự cố năm 2038
- timestamp trong javascript
- date.now trả về gì
- mysql timestamp và datetime
- jwt exp timestamp
- đổi timestamp sang excel
- giây nhuận unix time
- epoch time 1970
- lấy timestamp hiện tại
- định dạng ngày giờ trong api
- relative time bao lâu trước
- công cụ đổi timestamp miễn phí
