Hỗ trợ kỹ thuật

Unix Timestamp giây và mili giây: vì sao ngày hiện 1970

Nếu Unix timestamp thành ngày gần 1970, thường là giây bị đọc thành mili giây. Cách phân biệt đơn vị.

Trả lời nhanh

Nếu Unix timestamp cho ngày gần 1970, giá trị thường bị hiểu sai đơn vị.

Unix timestamp thường dùng giây, còn Date trong JavaScript thường dùng mili giây.

Timestamp hiện đại 10 chữ số thường là giây; 13 chữ số thường là mili giây. Nếu đơn vị không khớp, có thể cần nhân hoặc chia 1.000.

Bạn đổi timestamp ra ngày và rơi vào tháng 1/1970. Hiếm khi đồng hồ hỏng. Số được đọc là mili giây trong khi lưu bằng giây—hoặc ngược lại.

Unix timestamp là gì?

Unix timestamp đo thời gian kể từ Unix epoch: 1970-01-01 00:00:00 UTC. Thường dùng giây nguyên. Cùng một thời điểm cũng có thể lưu bằng mili giây (giây × 1.000). Bản thân con số không ghi đơn vị.

Giây và mili giây: chênh 1.000 lần

Một giây bằng 1.000 mili giây. So 1720000000 với 1720000000000. Nếu cái trước là giây và cái sau là mili giây, đó cùng một thời điểm. Đọc cái trước như mili giây thì ngày nhảy về 1970.

Các kết quả UTC này được tính từ các số ở trên, không phải đoán.

Giá trị Đơn vị có thể Cách hiểu (UTC)
1720000000 Giây Ngày hiện đại khi đọc là giây: 2024-07-03 09:46:40 UTC
1720000000000 Mili giây Cùng thời điểm khi đọc là mili giây: 2024-07-03 09:46:40 UTC
1720000000 như mili giây Sai đơn vị Ngày gần 1970: 1970-01-20 21:46:40 UTC

Vì sao timestamp của tôi hiện 1970?

Nếu giá trị giây bị xử lý như mili giây, con số nhỏ hơn 1.000 lần. JavaScript chỉ đếm một đoạn ngắn sau Unix epoch nên ngày nằm ở 1970:

const seconds = 1720000000;

new Date(seconds);
// 1970-01-20 21:46:40 UTC

new Date(seconds * 1000);
// 2024-07-03 09:46:40 UTC

Ngày 1970 đó là epoch cộng khoảng hai tuần. Nhân giây với 1.000 trước khi đưa vào Date.

  • GIÂY
  • 1720000000
  • MILI GIÂY
  • 1720000000000
Cùng thời điểm: giây × 1.000 = mili giây.
  • Giá trị giây
  • Bị nhầm thành mili giây
  • Ngày gần 1970
Giá trị giây đọc như mili giây rơi gần Unix epoch.
Giây hay mili giây?

Nếu kết quả gần 1970, hãy kiểm tra đơn vị timestamp trước khi soi múi giờ.

10 chữ số là giây và 13 chữ số là mili giây?

Với ngày hiện nay, 10 chữ số thường là giây và 13 thường là mili giây. Đó là gợi ý nhanh, không phải quy tắc kiểm tra. Số chữ số đổi theo khoảng thời gian; một số API lưu micro giây hoặc nano giây. Xác nhận đơn vị bằng tài liệu hoặc một ngày hợp lý.

Vì sao chuyện này hay xảy ra trong JavaScript

Trong JavaScript, Date dạng số là mili giây từ epoch. Nhiều backend, cơ sở dữ liệu và công cụ Unix vẫn lưu giây. Đưa giá trị giây thẳng vào Date là lỗi thường gặp:

const unixSeconds = 1720000000;

const wrong = new Date(unixSeconds);
const correct = new Date(unixSeconds * 1000);

wrong gần 1970 (1970-01-20 21:46:40 UTC). correct là thời điểm hiện đại (2024-07-03 09:46:40 UTC).

Hệ thống khác dùng đơn vị khác

Ngôn ngữ, API và cơ sở dữ liệu khác có thể dùng giây hoặc mili giây. Một số lưu micro giây hoặc nano giây. Đừng cho rằng một ngôn ngữ luôn dùng một đơn vị—xem tài liệu. Nếu số nằm trong JSON, Định dạng và so sánh JSON giúp đọc trường; vẫn không cho biết đơn vị.

Làm sao biết timestamp dùng đơn vị nào?

Làm các bước này theo thứ tự. Chỉ đếm chữ số thì chưa đủ.

  1. Xem tài liệu API hoặc cơ sở dữ liệu.
  2. Nhìn số chữ số gần đúng.
  3. So giá trị với một timestamp hiện đại hợp lý.
  4. Thử giá trị như giây và như mili giây.
  5. Xem ngày ra có hợp lý không.

Nếu một cách hiểu ra 1970 còn cách kia ra ngày bạn nhận ra, nguyên nhân là đơn vị.

Sai lầm Unix timestamp thường gặp

  • Giây bị hiểu thành mili giây. Ngày sụp về 1970 như ví dụ trên.
  • Mili giây bị hiểu thành giây. Ngày nhảy xa về tương lai, hoặc chuyển đổi thất bại.
  • Nhân 1.000 hai lần. Giá trị vốn đã là mili giây trở nên khổng lồ và ngày tiến hàng thế kỷ.
  • Chia 1.000 hai lần. Giá trị giây lại co lại, lại gần 1970.
  • Đổ lỗi múi giờ. Múi giờ có thể lệch giờ hoặc ngày lịch. Nó không biến timestamp hiện đại thành 1970.
  • Coi chuỗi ngày đã định dạng là Unix timestamp. Giá trị như 2024-07-03T09:46:40Z không phải số epoch. Phân tích như chuỗi ngày, không phải giây.

Múi giờ có gây vấn đề 1970 không?

Thường thì không. Múi giờ có thể đổi đồng hồ hiển thị và, gần nửa đêm, ngày lịch. Nó không biến Unix timestamp hiện đại thành 1970. Nếu kết quả là 1970, hãy kiểm tra giây với mili giây trước.

Chuyển và kiểm tra Unix timestamp

NEXNARA Chuyển đổi ngày giờ có thể chuyển Unix timestamp trong trình duyệt.

Dán giây hoặc mili giây Unix, dùng timestamp hiện tại, xem UTC và giờ địa phương, chuyển múi giờ và định dạng ngày. Tự nhận diện thường coi 10 chữ số là giây và 13 là mili giây; bạn vẫn có thể chọn đơn vị.

Bản thân việc chuyển đổi chạy trong trình duyệt. Công cụ này không gửi ngày hay timestamp tới máy chủ NEXNARA. Quảng cáo và tính năng khác của trang vẫn dùng mạng; điều đó tách biệt với chuyển đổi.

Cần kiểm tra Unix timestamp? Mở Chuyển đổi ngày giờ và so giây với mili giây.

FAQ

Vì sao Unix timestamp của tôi hiện 1970?

Thường là giây bị đọc thành mili giây. JavaScript xử lý một số nhỏ hơn nhiều nên ngày nằm ngay sau 1970-01-01 00:00:00 UTC. Nhân giây với 1.000 rồi chuyển lại.

Unix timestamp là giây hay mili giây?

Thường là giây. Nhiều API web và Date JavaScript dùng mili giây. Xem tài liệu hệ thống đó. Một số dùng micro giây hoặc nano giây.

Làm sao đổi giây thành mili giây?

Nhân 1.000. 1720000000 giây bằng 1720000000000 mili giây. Chiều ngược lại thì chia 1.000.

Vì sao Date JavaScript dùng mili giây?

Timestamp số của Date trong JavaScript được định nghĩa là mili giây từ Unix epoch. Vì thế new Date(unixSeconds) sai khi unixSeconds là giây Unix.

Timestamp 10 chữ số luôn là giây?

Không. Với ngày hiện nay thường đúng, và 13 chữ số thường là mili giây. Số chữ số là gợi ý, không phải quy tắc. Xác nhận bằng tài liệu hoặc ngày hợp lý.

Unix timestamp có chứa múi giờ không?

Không. Unix timestamp là một thời điểm đếm từ 1970-01-01 00:00:00 UTC. Múi giờ ảnh hưởng cách hiển thị, không phải bản thân con số.