Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Phương thức Date.UTC() trong JavaScript

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-1999
  • monthIndex: Tháng 0-based (0 = Tháng 1, 11 = Tháng 12)
  • day: Ngày trong tháng (1-31), mặc định 1
  • hours: Giờ (0-23), mặc định 0
  • minutes: Phút (0-59), mặc định 0
  • seconds: Giây (0-59), mặc định 0
  • ms: 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ượng Date