Chuyển đổi dấu thời gian

Chuyển đổi dấu thời gian Unix sang ngày đọc được và ngược lại

Dấu thời gian Unix hiện tại

1774458477

Wed, 25 Mar 2026 17:07:57 GMT

hoặc

Dấu thời gian Unix là gì?

Dấu thời gian Unix (còn gọi là epoch time hoặc POSIX time) là số giây đã trôi qua kể từ ngày 1 tháng 1 năm 1970, 00:00:00 UTC. Ngày này được gọi là Unix epoch. Mỗi giây trôi qua, bộ đếm tăng thêm một, cho phép mỗi thời điểm được biểu diễn bằng một số nguyên duy nhất. Công cụ chuyển đổi dấu thời gian Unix dịch qua lại giữa số nguyên này và các định dạng ngày đọc được như ISO 8601, RFC 2822 hoặc chuỗi theo ngôn ngữ địa phương.

Dấu thời gian Unix là cách tiêu chuẩn để biểu diễn thời gian trong hệ thống máy tính. Cơ sở dữ liệu lưu các cột created_at và updated_at dưới dạng số nguyên hoặc dấu thời gian mili giây. Phản hồi API chứa dấu thời gian trong các tiêu đề cache (Expires, Last-Modified), các claim của JWT (iat, exp, nbf) và nhật ký sự kiện. Tệp nhật ký từ nginx, syslog và các framework ứng dụng đều dùng epoch time. Định dạng này không gây nhầm lẫn vì luôn biểu diễn UTC, không có múi giờ hay giờ tiết kiệm ánh sáng ban ngày.

Chuyển đổi giữa dấu thời gian và ngày tháng bằng tay rất dễ mắc lỗi. Một giá trị như 1711324800 không cho thấy trực quan ngày tháng nào nó đại diện. Công cụ này chuyển đổi dấu thời gian Unix sang ngày đọc được và ngược lại. Dù bạn đang đọc một claim exp trong JWT, gỡ lỗi truy vấn cơ sở dữ liệu, hay kiểm tra dấu thời gian trong nhật ký, công cụ tự động xử lý cả giá trị 10 chữ số (giây) lẫn 13 chữ số (mili giây).

Tại sao dùng công cụ chuyển đổi dấu thời gian này?

Đọc dấu thời gian Unix thô từ nhật ký, cơ sở dữ liệu hay phản hồi API đòi hỏi phải nhớ phép tính epoch hoặc viết đoạn code tạm thời. Công cụ này thực hiện ngay trong trình duyệt mà không cần cài đặt. Dù bạn cần giải mã thời hạn JWT, kiểm tra một dòng nhật ký hay đặt TTL cho cơ sở dữ liệu, kết quả chỉ cần một cú nhấp. Công cụ tự phát hiện giá trị là dấu thời gian 10 chữ số (giây) hay 13 chữ số (mili giây), nên bạn không cần chia thủ công cho 1000. Toàn bộ quá trình xử lý chạy cục bộ trong trình duyệt. Dữ liệu không rời khỏi máy của bạn, đảm bảo dấu thời gian từ hệ thống nội bộ và nhật ký nhạy cảm được bảo mật.

Chuyển đổi tức thì
Nhập dấu thời gian hoặc chọn ngày và xem kết quả ngay lập tức. Không cần gửi form, không tải lại trang. Hỗ trợ cả giây lẫn mili giây.
🔒
Xử lý ưu tiên quyền riêng tư
Tất cả phép chuyển đổi chạy trong trình duyệt bằng đối tượng Date tích hợp sẵn của JavaScript. Dữ liệu không rời khỏi máy của bạn, đảm bảo dấu thời gian từ hệ thống nội bộ được bảo mật.
🔄
Chuyển đổi hai chiều
Chuyển đổi dấu thời gian Unix sang ngày và ngày sang dấu thời gian. Nhập giá trị theo hướng nào cũng được và nhận kết quả tương ứng mà không cần đổi công cụ.
🌐
Nhiều định dạng đầu ra
Xem dấu thời gian của bạn dưới dạng UTC, giờ địa phương, ISO 8601 và thời gian tương đối cùng lúc. Sao chép bất kỳ định dạng nào chỉ với một cú nhấp.

Các trường hợp sử dụng công cụ chuyển đổi dấu thời gian

Phát triển Frontend
Giải mã dấu thời gian từ phản hồi REST API để xác minh hiển thị ngày tháng đúng theo múi giờ. Kiểm tra xem API trả về giây hay mili giây.
Kỹ thuật Backend
Chuyển đổi dấu thời gian cơ sở dữ liệu khi gỡ lỗi truy vấn. Xác minh rằng các giá trị created_at, updated_at và expires_at khớp với ngày tháng mong đợi sau khi di chuyển dữ liệu hoặc thay đổi múi giờ.
DevOps và SRE
Dịch giá trị epoch từ tệp nhật ký, bảng điều khiển giám sát (Grafana, Datadog) và hệ thống cảnh báo để xác định chính xác thời điểm sự cố bắt đầu hoặc quá trình triển khai hoàn thành.
QA và Kiểm thử
Tạo dấu thời gian cụ thể cho dữ liệu kiểm thử. Xác minh các tính năng phụ thuộc thời gian như hết hạn token, TTL cache và tác vụ định kỳ kích hoạt đúng thời điểm.
Kỹ thuật Dữ liệu
Chuyển đổi cột dấu thời gian khi kiểm tra dữ liệu xuất thô từ PostgreSQL, MySQL hoặc kho dữ liệu. Xác nhận rằng pipeline ETL lưu giữ đúng thông tin múi giờ.
Học tập và Giáo dục
Tìm hiểu cách máy tính biểu diễn thời gian nội bộ. Thử nghiệm với các trường hợp biên như vấn đề Y2038, dấu thời gian âm cho ngày trước năm 1970 và độ chính xác mili giây.

Bảng tham chiếu dấu thời gian Unix

Bảng dưới đây liệt kê các dấu thời gian Unix nổi tiếng cùng ngày tháng tương ứng. Các giá trị này hữu ích để kiểm tra nhanh, kiểm thử và hiểu phạm vi của dấu thời gian 32-bit và 64-bit.

Dấu thời gianNgày (UTC)Ghi chú
0Jan 1, 1970 00:00:00 UTCUnix epoch start
86400Jan 2, 1970 00:00:00 UTCExactly 1 day
946684800Jan 1, 2000 00:00:00 UTCY2K
1000000000Sep 9, 2001 01:46:40 UTC10-digit milestone
1234567890Feb 13, 2009 23:31:30 UTCAscending digits
1700000000Nov 14, 2023 22:13:20 UTCRecent 10-digit
2000000000May 18, 2033 03:33:20 UTCNext 10-digit milestone
2147483647Jan 19, 2038 03:14:07 UTCY2038 (signed 32-bit max)
4102444800Jan 1, 2100 00:00:00 UTCNext century

So sánh định dạng ngày giờ

Các hệ thống và tiêu chuẩn khác nhau biểu diễn cùng một thời điểm bằng các định dạng chuỗi khác nhau. Bảng so sánh các định dạng phổ biến nhất mà bạn sẽ gặp trong API, nhật ký và cơ sở dữ liệu.

Định dạngVí dụGhi chú
Unix (seconds)1711324800Integer, no timezone info
Unix (milliseconds)1711324800000Used by JavaScript Date.now()
ISO 86012024-03-25T00:00:00ZMachine-readable, includes timezone
RFC 2822Mon, 25 Mar 2024 00:00:00 +0000Email and HTTP headers
UTC stringMon, 25 Mar 2024 00:00:00 GMTDate.prototype.toUTCString()
Human readableMarch 25, 2024, 12:00:00 AMLocale-dependent, display only

Ví dụ mã nguồn

Chuyển đổi giữa dấu thời gian Unix và ngày tháng trong ngôn ngữ lập trình bạn đang dùng. Mỗi ví dụ minh họa cả hai chiều: từ dấu thời gian sang ngày và từ ngày sang dấu thời gian.

JavaScript (browser / Node.js)
// Current Unix timestamp in seconds
Math.floor(Date.now() / 1000)  // → 1711324800

// Unix timestamp to Date object
const date = new Date(1711324800 * 1000)
date.toISOString()             // → "2024-03-25T00:00:00.000Z"
date.toUTCString()             // → "Mon, 25 Mar 2024 00:00:00 GMT"

// Date string to Unix timestamp
Math.floor(new Date('2024-03-25T00:00:00Z').getTime() / 1000)
// → 1711324800

// Millisecond timestamps (common in JS APIs)
Date.now()                     // → 1711324800000 (ms)
Date.parse('2024-03-25')       // → 1711324800000 (ms)
Python
import time
from datetime import datetime, timezone

# Current Unix timestamp
int(time.time())                                    # → 1711324800

# Unix timestamp to datetime
dt = datetime.fromtimestamp(1711324800, tz=timezone.utc)
dt.isoformat()                                      # → '2024-03-25T00:00:00+00:00'
dt.strftime('%Y-%m-%d %H:%M:%S %Z')                 # → '2024-03-25 00:00:00 UTC'

# Datetime string to Unix timestamp
dt = datetime.fromisoformat('2024-03-25T00:00:00+00:00')
int(dt.timestamp())                                  # → 1711324800

# Parse RFC 2822 dates (from email headers)
from email.utils import parsedate_to_datetime
parsedate_to_datetime('Mon, 25 Mar 2024 00:00:00 +0000').timestamp()
# → 1711324800.0
Go
package main

import (
    "fmt"
    "time"
)

func main() {
    // Current Unix timestamp
    now := time.Now().Unix() // → 1711324800

    // Unix timestamp to time.Time
    t := time.Unix(1711324800, 0).UTC()
    fmt.Println(t.Format(time.RFC3339))
    // → 2024-03-25T00:00:00Z

    // Parse a date string to Unix timestamp
    parsed, _ := time.Parse(time.RFC3339, "2024-03-25T00:00:00Z")
    fmt.Println(parsed.Unix())
    // → 1711324800

    // Millisecond timestamp
    ms := time.Now().UnixMilli() // → 1711324800000
    fmt.Println(now, ms)
}
CLI (date / bash)
# Current Unix timestamp
date +%s                                    # → 1711324800

# Convert timestamp to human-readable date (GNU date)
date -d @1711324800                         # → Mon Mar 25 00:00:00 UTC 2024

# Convert timestamp to ISO 8601
date -d @1711324800 --iso-8601=seconds      # → 2024-03-25T00:00:00+00:00

# macOS (BSD date) — slightly different flags
date -r 1711324800                          # → Mon Mar 25 00:00:00 UTC 2024

# Date string to timestamp (GNU date)
date -d "2024-03-25 00:00:00 UTC" +%s       # → 1711324800

Câu hỏi thường gặp

Sự khác biệt giữa dấu thời gian Unix tính bằng giây và mili giây là gì?
Dấu thời gian Unix tính bằng giây là số nguyên 10 chữ số (cho đến tháng 11 năm 2286), trong khi dấu thời gian mili giây có 13 chữ số. Hàm Date.now() của JavaScript trả về mili giây. Hầu hết công cụ dòng lệnh Unix và hàm time.time() của Python trả về giây. Để chuyển đổi giữa chúng, nhân giây với 1000 hoặc chia mili giây cho 1000 và lấy phần nguyên.
Vấn đề Năm 2038 là gì?
Các hệ thống lưu dấu thời gian Unix dưới dạng số nguyên có dấu 32-bit sẽ bị tràn vào ngày 19 tháng 1 năm 2038 lúc 03:14:07 UTC. Giá trị tối đa mà số nguyên có dấu 32-bit có thể lưu là 2.147.483.647 giây sau epoch. Sau đó, giá trị sẽ cuộn về số âm, khiến hệ thống hiểu là ngày tháng 12 năm 1901. Các hệ thống 64-bit hiện đại dùng số nguyên 64-bit và không bị ảnh hưởng.
Làm thế nào để chuyển đổi dấu thời gian Unix sang ngày trong JavaScript?
Tạo đối tượng Date mới bằng cách truyền dấu thời gian nhân với 1000 (vì JavaScript dùng mili giây): new Date(1711324800 * 1000). Sau đó gọi .toISOString(), .toUTCString() hoặc .toLocaleString() để lấy định dạng cần thiết. Theo chiều ngược lại, dùng Math.floor(new Date('2024-03-25').getTime() / 1000).
Dấu thời gian Unix có biểu diễn được ngày trước năm 1970 không?
Có. Ngày trước Unix epoch (1 tháng 1 năm 1970) được biểu diễn bằng số nguyên âm. Ví dụ, ngày 31 tháng 12 năm 1969 lúc 23:59:59 UTC có dấu thời gian là -1. Hầu hết các ngôn ngữ lập trình hiện đại xử lý dấu thời gian âm đúng cách, dù một số hệ thống và cơ sở dữ liệu cũ có thể không hỗ trợ.
Tại sao API dùng dấu thời gian Unix thay vì chuỗi ngày tháng?
Dấu thời gian Unix độc lập với múi giờ, nhỏ gọn (một số nguyên so với chuỗi 25+ ký tự) và dễ so sánh. Sắp xếp, so sánh và tính khoảng thời gian với số nguyên nhanh hơn phân tích chuỗi ngày tháng. Chúng cũng tránh sự mơ hồ từ các định dạng phụ thuộc ngôn ngữ như MM/DD/YYYY so với DD/MM/YYYY.
Làm thế nào để lấy dấu thời gian Unix hiện tại từ dòng lệnh?
Trên Linux và macOS, chạy date +%s để in dấu thời gian hiện tại tính bằng giây. Trên Windows với PowerShell, dùng [DateTimeOffset]::UtcNow.ToUnixTimeSeconds(). Cả hai trả về số nguyên giây kể từ Unix epoch. Để có độ chính xác mili giây trên Linux, dùng date +%s%3N để nối thêm thành phần mili giây trực tiếp.
Sự khác biệt giữa UTC và GMT trong dấu thời gian là gì?
Trong thực tế, đối với máy tính, UTC và GMT chỉ cùng một thời gian. UTC (Giờ Phối hợp Quốc tế) là tiêu chuẩn hiện đại được định nghĩa bởi đồng hồ nguyên tử, trong khi GMT (Giờ Greenwich) là tiêu chuẩn thiên văn cũ hơn. Dấu thời gian Unix luôn dựa trên UTC. Bạn có thể thấy cả hai nhãn trong chuỗi ngày tháng được định dạng, nhưng giá trị cơ bản là giống hệt nhau.