Phương thức tĩnh Date.UTC() nhận các thành phần ngày giờ (năm, tháng, ngày, giờ, phút, giây, mili-giây) theo thời gian UTC và trả về timestamp (mili-giây từ epoch UTC). Khác với constructor Date, Date.UTC() luôn xử lý tham số là UTC, không phải local time.
Cú pháp
Date.UTC(year, monthIndex[, day[, hours[, minutes[, seconds[, ms]]]]])
year: Năm (ví dụ: 2024). Giá trị 0-99 được hiểu là 1900-1999monthIndex: Tháng 0-based (0 = Tháng 1, 11 = Tháng 12)day: Ngày trong tháng (1-31), mặc định 1hours: Giờ (0-23), mặc định 0minutes: Phút (0-59), mặc định 0seconds: Giây (0-59), mặc định 0ms: Mili-giây (0-999), mặc định 0- Trả về: Timestamp (số mili-giây UTC)
Ví dụ cơ bản
// 26/9/1989 03:04:05 UTC
const timestamp = Date.UTC(1989, 8, 26, 3, 4, 5);
const date = new Date(timestamp);
console.log(date.toUTCString()); // "Tue, 26 Sep 1989 03:04:05 GMT"
// Chỉ năm, tháng, ngày
console.log(Date.UTC(2024, 11, 25)); // 1735084800000 (25/12/2024 00:00:00 UTC)
Lưu ý quan trọng: Tháng 0-based
Date.UTC(2024, 0, 1); // 1/1/2024
Date.UTC(2024, 11, 31); // 31/12/2024
Date.UTC(2024, 12, 1); // 1/1/2025 (tháng 12 -> tràn sang năm sau)
So sánh Date.UTC() vs new Date()
// Giả sử múi giờ local là UTC+7
// Date.UTC() - tham số là UTC
const utcTimestamp = Date.UTC(2024, 0, 1, 0, 0, 0); // 2024-01-01 00:00:00 UTC
console.log(new Date(utcTimestamp).toISOString()); // "2024-01-01T00:00:00.000Z"
// new Date() - tham số là LOCAL TIME
const localTimestamp = new Date(2024, 0, 1, 0, 0, 0).getTime(); // 2024-01-01 00:00:00 LOCAL
console.log(new Date(localTimestamp).toISOString()); // "2023-12-31T17:00:00.000Z" (lùi 7h)
Ứng dụng
- Tạo timestamp UTC từ các thành phần tách biệt
- Lưu trữ ngày giờ chuẩn UTC trong database
- Tính toán chênh lệch múi giờ
- Lập lịch task chạy tại thời điểm UTC cụ thể
Lưu ý
- Tháng là 0-based (0-11) - nguồn gây bug phổ biến
- Năm 0-99 map đến 1900-1999 (legacy behavior)
- Giá trị vượt phạm vi (ví dụ month=15, day=40) sẽ tự động normalize (tràn sang tháng/năm sau)
- Trả về
number(timestamp), không phải đối tượngDate