Các getTimezoneOffset()
phương pháp trong JavaScript, trong một trình duyệt, trả về số phút bù đắp từ vùng 00:00 thời gian. Ví dụ: múi giờ America / New_York trong Tiết kiệm ánh sáng ban ngày (DST) trả về số 300. 300 phút là 5 giờ chênh lệch từ 0. 300 phút chia cho 60 phút là 5 giờ. Mỗi múi giờ được so sánh với múi giờ bằng 0, thời gian: 00 / Etc / GMT / Greenwich.
Tài liệu web MDN
Điều tiếp theo mà bạn phải biết, đó là phần bù có dấu ngược lại với múi giờ thực tế.
Thông tin về múi giờ được duy trì bởi Cơ quan cấp số được gán Internet (iana)
múi giờ iana
Một bảng thời gian được định dạng độc đáo được cung cấp bởi joda.org
khu thời gian joda
Giờ: 00 hoặc Etc / GMT là giờ Greenwich
Tất cả các múi giờ được bù từ GIÁ: 00 / "Vv / GMT" / Giờ Greenwich
Thời gian tiết kiệm ánh sáng ban ngày luôn là thời gian sớm hơn thời gian "thông thường" vào mùa hè. Bạn đặt đồng hồ trở lại vào mùa thu. (Slogan "Fall Back" để nhớ những việc cần làm)
Vì vậy, giờ Mỹ / New_York trong Tiết kiệm ánh sáng ban ngày (mùa đông) là một giờ trước giờ thường lệ. Vì vậy, ví dụ, những gì thường là 5 giờ chiều vào buổi chiều ở thành phố New York vào mùa hè, bây giờ là 4 giờ chiều Mỹ / New_York trong Tiết kiệm ánh sáng ban ngày. Tên thời gian "America / New_York" là tên múi giờ "Định dạng dài". Bờ biển phía đông của Hoa Kỳ thường gọi múi giờ của họ là Giờ chuẩn miền đông (EST)
Nếu bạn muốn so sánh độ lệch múi giờ ngày hôm nay với độ lệch múi giờ của một số ngày khác, bạn cần biết rằng dấu toán học (+/- "Tích cực / tiêu cực") của độ lệch múi giờ ngược với múi giờ.
Nhìn vào bảng múi giờ tại joda.org và tìm múi giờ cho "America / New_York" Nó sẽ có dấu âm ở phía trước của Offset tiêu chuẩn.
Trái đất quay ngược chiều kim đồng hồ trên trục của nó. Một người ngắm mặt trời mọc ở Greenwich nhìn thấy mặt trời mọc 5 giờ trước khi ai đó ở thành phố New York sẽ thấy mặt trời mọc. Và ai đó ở Bờ Tây Hoa Kỳ sẽ thấy mặt trời mọc sau khi ai đó ở Bờ Đông Hoa Kỳ nhìn thấy mặt trời mọc.
Có một lý do tại sao bạn cần biết tất cả những điều này. Vì vậy, bạn sẽ có thể xác định một cách hợp lý xem một số mã JavaScript có nhận được trạng thái DST chính xác hay không, mà không cần phải kiểm tra mọi múi giờ vào các thời điểm khác nhau trong năm.
Hãy tưởng tượng rằng đó là tháng 11 ở thành phố New York và đồng hồ đã được đặt lại một giờ. Vào mùa hè ở thành phố New York, thời gian bù là 240 phút hoặc 4 giờ.
Bạn có thể kiểm tra điều này bằng cách tạo một ngày trong tháng 7 và sau đó lấy phần bù.
var July_Date = new Date(2017, 6, 1);
var july_Timezone_OffSet = July_Date.getTimezoneOffset();
console.log('july_Timezone_OffSet: ' + july_Timezone_OffSet)
Điều gì sẽ in ra nhật ký bảng điều khiển công cụ phát triển của trình duyệt?
Trả lời là: 240
Vì vậy, bây giờ bạn có thể tạo một ngày vào tháng 1 và xem những gì trình duyệt của bạn trả về cho phần bù múi giờ cho mùa đông.
var Jan_Date = new Date(2017, 0, 1);//Month is zero indexed - Jan is zero
var jan_Timezone_OffSet = Jan_Date.getTimezoneOffset();
console.log('jan_Timezone_OffSet: ' + jan_Timezone_OffSet)
Trả lời là: 300
Rõ ràng 300 lớn hơn 240. Vậy, điều này có nghĩa là gì? Bạn có nên viết mã kiểm tra phần bù mùa đông lớn hơn phần bù mùa hè không? Hoặc bù mùa hè ít hơn bù mùa đông? Nếu có sự khác biệt giữa độ lệch múi giờ mùa hè và mùa đông, thì bạn có thể giả sử rằng DST đang được sử dụng cho múi giờ này. Nhưng điều đó không cho bạn biết nếu hôm nay đang sử dụng DST cho múi giờ của trình duyệt. Vì vậy, bạn sẽ cần lấy phần bù múi giờ cho ngày hôm nay.
var today = new Date();
var todaysTimeZone = today.getTimezoneOffset();
console.log('todaysTimeZone : ' + todaysTimeZone)
Câu trả lời là: ? - Phụ thuộc vào thời gian trong năm
Nếu độ lệch múi giờ ngày nay và độ lệch múi giờ mùa hè là như nhau, VÀ độ lệch múi giờ mùa hè và mùa đông là khác nhau, thì bằng cách khấu trừ logic, hôm nay KHÔNG được ở DST.
Bạn có thể bỏ qua việc so sánh độ lệch múi giờ mùa hè và mùa đông, (Để biết liệu DST có được sử dụng cho múi giờ này không) và chỉ so sánh độ lệch múi giờ ngày nay với độ lệch TZ mùa hè và luôn có câu trả lời đúng?
today's TZ Offset !== Summer TZ Offset
Chà, hôm nay là mùa đông hay mùa hè? Nếu bạn biết điều đó thì bạn có thể áp dụng logic sau:
if ( it_is_winter && ( todays_TZ_Offset !== summer_TZ_Offset) {
var are_We_In_DST = true;
}
Nhưng vấn đề là, bạn không biết ngày hôm nay là vào mùa đông hay mùa hè. Mỗi múi giờ có thể có các quy tắc riêng khi DST bắt đầu và dừng. Bạn cần theo dõi các quy tắc của mọi múi giờ cho mọi múi giờ trên thế giới. Vì vậy, nếu có một cách tốt hơn và dễ dàng hơn thì bạn cũng có thể làm điều đó tốt hơn và dễ dàng hơn.
Những gì chúng tôi còn lại, là bạn cần biết nếu múi giờ này sử dụng DST, và sau đó so sánh bù múi giờ ngày nay với bù giờ múi giờ mùa hè. Điều đó sẽ luôn cung cấp cho bạn một câu trả lời đáng tin cậy.
Logic cuối cùng là:
if ( DST_Is_Used_In_This_Time_Zone && ( todays_TZ_Offset !== summer_TZ_Offset) {
var are_We_In_DST = true;
}
Chức năng xác định xem múi giờ trong trình duyệt có sử dụng DST không:
function is_DST_Used_In_This_TimeZone() {
var Jan_Date, jan_Timezone_OffSet, July_Date, july_Timezone_OffSet
offsetsNotEqual, thisYear, today;
today = new Date();//Create a date object that is now
thisYear = today.getFullYear();//Get the year as a number
Jan_Date = new Date(thisYear, 0, 1);//Month is zero indexed - Jan is zero
jan_Timezone_OffSet = Jan_Date.getTimezoneOffset();
console.log('jan_Timezone_OffSet: ' + jan_Timezone_OffSet)
July_Date = new Date(thisYear, 6, 1);
july_Timezone_OffSet = July_Date.getTimezoneOffset();
console.log('july_Timezone_OffSet: ' + july_Timezone_OffSet)
offsetsNotEqual = july_Timezone_OffSet !== jan_Timezone_OffSet;//True if not equal
console.log('offsetsNotEqual: ' + offsetsNotEqual);
return offsetsNotEqual;//If the offsets are not equal for summer and
//winter then the only possible reason is that DST is used for
//this time zone
}
getTimezoneOffset
trả về giá trị nghịch đảo, nênMath.max
thực sự trả về giá trị bù chuẩn . Mã là chính xác.