getTimezoneOffset()
자바 스크립트의 방법은, 브라우저에서, 00:00 시간대 오프셋 (분)을 반환합니다. 예를 들어 일광 절약 시간제 (DST)의 America / New_York 시간대는 숫자 300을 반환합니다. 300 분은 0에서 5 시간의 차이입니다. 300 분을 60 분으로 나눈 값은 5 시간입니다. 모든 시간대는 0 시간대 +00 : 00 / 기타 / GMT / 그리니치 시간과 비교됩니다.
MDN 웹 문서
다음으로 알아야 할 것은 오프셋에 실제 시간대의 반대 부호가 있다는 것입니다.
표준 시간대에 대한 정보는 인터넷 할당 번호 기관 (iana)에서 관리합니다.
iana 시간대
멋진 형식의 시간대 표는 joda.org에서 제공합니다.
joda- 시간대
+00 : 00 또는 기타 / GMT는 그리니치 시간입니다
모든 시간대는 +00 : 00 / "Etc / GMT"/ 그리니치 시간에서 오프셋됩니다.
일광 절약 시간은 항상 여름의 "일반"시간보다 빠릅니다. 가을 시즌에 시계를 다시 설정합니다. (무엇을해야하는지 기억하기위한 "폴백"슬로건)
따라서 일광 절약 시간제 (겨울)의 America / New_York 시간은 정규 시간 1 시간 전입니다. 예를 들어, 여름에 뉴욕시에서 오후 5시 (일반적으로 오후 5시)는 일광 절약 시간으로 오후 4시 (미국 / 뉴욕)입니다. "America / New_York"시간은 "Long Format"시간대 이름입니다. 미국 동부 해안은 일반적으로 시간대를 동부 표준시 (EST)라고합니다.
오늘 시간대 오프셋을 다른 날짜의 시간대 오프셋과 비교하려면 시간대 오프셋의 수학 부호 (+/- "양수 / 음수")가 시간대와 반대라는 것을 알아야합니다.
joda.org의 시간대 표를보고 "America / New_York"의 시간대를 찾으십시오. 표준 오프셋 앞에 음의 부호가 있습니다.
지구는 축의 시계 반대 방향으로 회전합니다. 그리니치에서 일출을 보는 사람은 뉴욕시의 누군가가 일출을 볼 수 있기 5 시간 전에 일출을 봅니다. 미국 서해안의 누군가가 일출을 본 후 미국 동부 해안의 누군가가 일출을 볼 수 있습니다.
이 모든 것을 알아야하는 이유가 있습니다. 따라서 연중 다른 시간대에 모든 시간대를 테스트 할 필요없이 일부 JavaScript 코드가 DST 상태를 올바르게 가져 오는지 여부를 논리적으로 확인할 수 있습니다.
뉴욕시에서 11 월에 시계가 한 시간 뒤로 설정되었다고 상상해보십시오. 뉴욕시의 여름에는 오프셋이 240 분 또는 4 시간입니다.
7 월에 날짜를 만든 다음 오프셋을 가져 와서이를 테스트 할 수 있습니다.
var July_Date = new Date(2017, 6, 1);
var july_Timezone_OffSet = July_Date.getTimezoneOffset();
console.log('july_Timezone_OffSet: ' + july_Timezone_OffSet)
브라우저의 개발자 도구 콘솔 로그에 무엇을 인쇄합니까?
답은 : 240
이제 1 월에 날짜를 만들고 겨울철 시간대 오프셋에 대해 브라우저가 반환하는 내용을 확인할 수 있습니다.
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)
답은 : 300
분명히 300은 240보다 큽니다. 이것이 무엇을 의미합니까? 겨울 오프셋이 여름 오프셋보다 큰지 테스트하는 코드를 작성해야합니까? 아니면 여름 오프셋이 겨울 오프셋보다 작습니까? 여름 시간대와 겨울 시간대 오프셋이 다른 경우이 시간대에 DST가 사용되고 있다고 가정 할 수 있습니다. 그러나 오늘날 브라우저 시간대에 DST를 사용하고 있는지 여부 는 알 수 없습니다 . 따라서 오늘의 시간대 오프셋을 가져와야합니다.
var today = new Date();
var todaysTimeZone = today.getTimezoneOffset();
console.log('todaysTimeZone : ' + todaysTimeZone)
답은? -시간에 따라 다름
오늘의 시간대 오프셋 및 오프셋 여름 시간대가 동일 경우 와 여름과 겨울 시간대 오프셋은 논리적 추론에 의해 다음, 다른, 오늘 DST에 있지해야합니다.
여름 및 겨울 시간대 오프셋 비교 (이 시간대에 DST가 사용되는지 알기 위해)를 생략하고 오늘 시간대 오프셋을 여름 TZ 오프셋과 비교하고 항상 정답을 얻을 수 있습니까?
today's TZ Offset !== Summer TZ Offset
오늘 겨울이나 여름에 있습니까? 알고 있다면 다음 논리를 적용 할 수 있습니다.
if ( it_is_winter && ( todays_TZ_Offset !== summer_TZ_Offset) {
var are_We_In_DST = true;
}
그러나 문제는 오늘 날짜가 겨울인지 여름인지 알 수 없다는 것입니다. 모든 표준 시간대에는 DST가 시작 및 중지되는시기에 대한 자체 규칙이있을 수 있습니다. 세계의 모든 시간대에 대한 모든 시간대 규칙을 추적해야합니다. 따라서 더 좋고 쉬운 방법이 있다면 더 좋고 쉬운 방법도 있습니다.
우리가 남긴 것은이 표준 시간대가 DST를 사용하는지 알고 오늘의 표준 시간대 오프셋과 서머 표준 시간대 오프셋을 비교해야한다는 것입니다. 그것은 항상 당신에게 신뢰할만한 대답을 줄 것입니다.
최종 논리는 다음과 같습니다.
if ( DST_Is_Used_In_This_Time_Zone && ( todays_TZ_Offset !== summer_TZ_Offset) {
var are_We_In_DST = true;
}
브라우저의 시간대가 DST를 사용하는지 판별하는 기능 :
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
반환 역수 값, 다음Math.max
실제로 반환 표준 오프셋. 코드가 맞습니다.