브라우저에서 클라이언트 표준시 가져오기
클라이언트 브라우저에서 시간대를 가져오는 믿을 수 있는 방법이 있습니까?저는 아래 링크를 보았지만 더 강력한 솔루션을 원합니다.
5년 후에 우리는 그것을 위한 내장된 방법을 갖게 되었습니다!최신 브라우저의 경우 다음을 사용합니다.
const tz = Intl.DateTimeFormat().resolvedOptions().timeZone;
console.log(tz);
IANA 표준 시간대 문자열을 반환하지만 오프셋은 반환하지 않습니다.자세한 내용은 MDN 참조 자료를 참조하십시오.
호환성 표 - 2019년 3월 기준으로 전 세계에서 사용 중인 브라우저의 90%에 대해 작동합니다.Internet Explorer에서 작동하지 않습니다.
종종 사람들이 "시간대"를 찾고 있을 때, 충분할 것은 단지"UTC 오프셋". 예를 들어, 서버가 UTC+5에 있고 클라이언트가 UTC-8에서 실행 중인지 확인하려고 합니다.
일반적으로 오래된 자바스크립트로.(new Date()).getTimezoneOffset()/60
UTC에서 오프셋된 현재 시간 수를 반환합니다.
그것은 가능한 "갓챠"의 징후에 주목할 가치가 있습니다.getTimezoneOffset()
반환 값(MDN 문서에서):
표준 시간대 오프셋은 UTC와 현지 시간의 차이(분)입니다.이는 로컬 시간대가 UTC보다 뒤에 있으면 오프셋이 양수이고 앞에 있으면 음수임을 의미합니다.예를 들어 표준 시간대 UTC+10:00(호주 동부 표준시, 블라디보스토크 표준시, 차모로 표준시)의 경우 -600이 반환됩니다.
그러나 시간/날짜 관련 Javascript 코드는 day.js를 사용하는 것이 좋습니다.이 경우 다음을 실행하여 ISO 8601 형식의 UTC 오프셋을 얻을 수 있습니다.
> dayjs().format("Z")
"-08:00"
고객이 이 정보를 쉽게 위조할 수 있다는 것을 언급하는 것은 아마도 의미가 있을 것입니다.
(참고: 이 답변은 원래 https://momentjs.com/, 을 권장했지만 dayjs는 더 현대적이고 작은 대안입니다.)
이 리포지토리 페이지 룸을 보십시오. 도움이 됩니다.
jstz.min.js를 다운로드하고 HTML 페이지에 기능을 추가합니다.
<script language="javascript">
function getTimezoneName() {
timezone = jstz.determine()
return timezone.name();
}
</script>
디스플레이 태그에서 이 기능을 호출합니다.
현재로서는 mbayloon의 답변에서 제안된 것처럼 jstz가 최선의 선택일 것입니다.
완전성을 위해, 그 방법에 표준이 있다는 것을 언급해야 합니다: Intl.Chrome에서 이미 확인할 수 있습니다.
> Intl.DateTimeFormat().resolvedOptions().timeZone
"America/Los_Angeles"
(이것은 실제로 기준을 따르지 않으며, 이것은 라이브러리를 고수해야 하는 또 다른 이유입니다.)
모멘트 시간대를 사용하여 시간대를 추측할 수 있습니다.
> moment.tz.guess()
"America/Asuncion"
여기에 jsfidle이 있습니다.
현재 사용자 표준 시간대의 약어를 제공합니다.
여기 코드 샘플이 있습니다.
var tz = jstz.determine();
console.log(tz.name());
console.log(moment.tz.zone(tz.name()).abbr(new Date().getTime()));
저는 UTC에서 브라우저 시간 오프셋과 DST를 인식하는지 여부를 결정하는 Josh Fraser가 취한 접근 방식과 유사한 접근 방식을 사용했습니다(그러나 그의 코드에서 다소 단순화됨).
var ClientTZ = {
UTCoffset: 0, // Browser time offset from UTC in minutes
UTCoffsetT: '+0000S', // Browser time offset from UTC in '±hhmmD' form
hasDST: false, // Browser time observes DST
// Determine browser's timezone and DST
getBrowserTZ: function () {
var self = ClientTZ;
// Determine UTC time offset
var now = new Date();
var date1 = new Date(now.getFullYear(), 1-1, 1, 0, 0, 0, 0); // Jan
var diff1 = -date1.getTimezoneOffset();
self.UTCoffset = diff1;
// Determine DST use
var date2 = new Date(now.getFullYear(), 6-1, 1, 0, 0, 0, 0); // Jun
var diff2 = -date2.getTimezoneOffset();
if (diff1 != diff2) {
self.hasDST = true;
if (diff1 - diff2 >= 0)
self.UTCoffset = diff2; // East of GMT
}
// Convert UTC offset to ±hhmmD form
diff2 = (diff1 < 0 ? -diff1 : diff1) / 60;
var hr = Math.floor(diff2);
var min = diff2 - hr;
diff2 = hr * 100 + min * 60;
self.UTCoffsetT = (diff1 < 0 ? '-' : '+') + (hr < 10 ? '0' : '') + diff2.toString() + (self.hasDST ? 'D' : 'S');
return self.UTCoffset;
}
};
// Onload
ClientTZ.getBrowserTZ();
, 드로시,,ClientTZ.getBrowserTZ()
다음을 설정하는 기능이 실행됩니다.
ClientTZ.UTCoffset
UTC에서 브라우저 시간 오프셋(분)(예: CST는 -360분이며 UTC에서 -6.0시간);ClientTZ.UTCoffsetT
형식상의 상쇄에.'±hhmmD'
(계속):'-0600D'
는 , , 입니다.D
및 DST용 »S
DST의 ; 비준(표 DST);ClientTZ.hasDST
(참 또는 거짓).
그ClientTZ.UTCoffset
일부 시간대에는 시간 간격띄우기(예: +0415)가 있기 때문에 시간이 아닌 분 단위로 제공됩니다.
뒤에 숨은 ClientTZ.UTCoffsetT
시간대에 제공되지 않음)와합니다.<select>
리스트에합니다.
아닙니다. 믿을 수 있는 방법은 하나도 없고 절대 없을 것입니다.당신은 정말로 고객을 믿을 수 있다고 생각했나요?
언급URL : https://stackoverflow.com/questions/6939685/get-client-time-zone-from-browser
'programing' 카테고리의 다른 글
여러 진입점을 갖도록 Spring Security 3.x 구성 (0) | 2023.08.09 |
---|---|
Android Studio에서 작성한 프로젝트에서 사용자 지정 글꼴을 사용하는 방법 (0) | 2023.08.09 |
사용자 지정 PowerShell 모듈을 원격 세션으로 가져오는 방법은 무엇입니까? (0) | 2023.08.09 |
Python: 클립보드 없이 Office/Excel 문서에서 내장된 OLE 액세스 (0) | 2023.08.09 |
UI 탭 표시줄의 색조/배경 색상 변경 (0) | 2023.08.09 |