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

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

Phương thức getTimezoneOffset() trả về chênh lệch giữa thời gian địa phương (local time) và UTC, tính bằng phút. Giá trị dương nghĩa là local time sau UTC (múi giờ âm như Mỹ), giá trị âm nghĩa là local time trước UTC (múi giờ dương như Việt Nam).

Cú pháp

dateObj.getTimezoneOffset()
  • Trả về: Số phút (integer), có thể âm hoặc dương
  • Không nhận tham số

Ví dụ cơ bản

// Giả sử chạy ở múi giờ UTC+7 (Việt Nam)
const date = new Date('1989-09-26T12:04:25');
console.log(date.getTimezoneOffset()); // -420 (UTC+7 = 7*60 = 420 phút trước UTC)

// Múi giờ UTC-5 (New York mùa đông)
const dateNY = new Date('1989-09-26T12:04:25');
// Nếu chạy ở NY: trả về 300 (5*60 = 300 phút sau UTC)

Công thức

offsetMinutes = (UTC - Local) in minutes
// Việt Nam UTC+7: UTC = Local - 7h -> offset = -420
// New York UTC-5: UTC = Local + 5h -> offset = +300

Ngày không hợp lệ

const invalid = new Date('September 40, 1989');
console.log(invalid.getTimezoneOffset()); // NaN (vì date object invalid)

Ứng dụng thực tế

1. Hiển thị múi giờ người dùng

function getTimezoneString() {
  const offset = new Date().getTimezoneOffset();
  const sign = offset <= 0 ? '+' : '-';
  const hours = Math.floor(Math.abs(offset) / 60).toString().padStart(2, '0');
  const minutes = (Math.abs(offset) % 60).toString().padStart(2, '0');
  return `UTC${sign}${hours}:${minutes}`;
}
console.log(getTimezoneString()); // "UTC+07:00" (ở Việt Nam)

2. Chuyển local time sang UTC

function toUTC(date) {
  return new Date(date.getTime() + date.getTimezoneOffset() * 60000);
}

3. Phát hiện thay đổi DST (Daylight Saving Time)

const jan = new Date(2024, 0, 1).getTimezoneOffset();  // Mùa đông
const jul = new Date(2024, 6, 1).getTimezoneOffset();  // Mùa hè
console.log(jan !== jul ? "Có DST" : "Không DST");

Lưu ý quan trọng

  • Trả về phút, không phải giờ
  • Dấu ngược với intuition: UTC+7 -> -420
  • Phụ thuộc vào múi giờ của môi trường chạy (browser/Node.js)
  • Đối tượng Date phải hợp lệ (không phải Invalid Date)
  • DST làm thay đổi offset theo mùa