JavaScript에서 시간대 이름을 어떻게 얻을 수 있습니까?


117

시간대 오프셋을 얻는 방법을 알고 있지만 필요한 것은 "America / New York"과 같은 것을 감지하는 기능입니다. JavaScript에서도 가능합니까 아니면 오프셋을 기반으로 게스트 화해야 할 것입니까?


2
여기에 존 나이 랜델 쓴 함수는, 어쩌면 도움이 bitbucket.org/pellepim/jstimezonedetect
yunzen

다음은 도움이 될 수있는 관련 답변입니다. stackoverflow.com/a/19421672/1447034
Douglas

답변:


241

국제화 API의 지원은 사용자의 시간대를 받고되며, 지원되는 모든 현재 브라우저에서.

console.log(Intl.DateTimeFormat().resolvedOptions().timeZone)

Internationalization API를 지원하는 일부 이전 브라우저 버전에서는 timeZone속성이 undefined사용자의 시간대 문자열이 아닌 로 설정됩니다 . 내가 알 수있는 한, 작성 당시 (2017 년 7 월) IE11제외한 모든 현재 브라우저 는 사용자 시간대를 문자열로 반환합니다.


6
결코는이 훨씬 간단하다 생각
모하메드 샤리프 C

5
굉장하다, 내가 본 순간을 사용하지 않는 첫 번째! 감사합니다
r0bb077

3
멋진 솔루션입니다. 이를 위해 전체 순간 시간대 플러그인을 포함하고 싶지 않았습니다.
Joan Gil

1
매우 간단하고 멋진 솔루션!
blackiii jul.

2
@DanielCompton 오,이 테이블에 대해 몰랐습니다. 다시 수정 해 주셔서 감사합니다.
CommonSenseCode

9

대부분의 찬성 답변 은 아마도 시간대를 얻는 가장 좋은 방법 일 것입니다.Intl.DateTimeFormat().resolvedOptions().timeZone 정의에 따라 영어로 된 IANA 시간대 이름을 반환합니다.

현재 사용자의 언어로 시간대 이름을 원하면 다음 Date과 같이의 문자열 표현 에서 구문 분석 할 수 있습니다 .

function getTimezoneName() {
  const today = new Date();
  const short = today.toLocaleDateString(undefined);
  const full = today.toLocaleDateString(undefined, { timeZoneName: 'long' });

  // Trying to remove date from the string in a locale-agnostic way
  const shortIndex = full.indexOf(short);
  if (shortIndex >= 0) {
    const trimmed = full.substring(0, shortIndex) + full.substring(shortIndex + short.length);
    
    // by this time `trimmed` should be the timezone's name with some punctuation -
    // trim it from both sides
    return trimmed.replace(/^[\s,.\-:;]+|[\s,.\-:;]+$/g, '');

  } else {
    // in some magic case when short representation of date is not present in the long one, just return the long one as a fallback, since it should contain the timezone's name
    return full;
  }
}

console.log(getTimezoneName());

Chrome 및 Firefox에서 테스트되었습니다.

물론 일부 환경에서는 의도 한대로 작동하지 않습니다. 예를 들어 node.js는 GMT+07:00이름 대신 GMT 오프셋 (예 :)을 반환합니다 . 하지만 여전히 대체로 읽을 수 있다고 생각합니다.

PS는 Intl...솔루션 과 마찬가지로 IE11에서 작동하지 않습니다 .


6

이 스크립트를 사용할 수 있습니다. http://pellepim.bitbucket.org/jstz/

여기에 저장소를 포크하거나 복제하십시오. https://bitbucket.org/pellepim/jstimezonedetect

스크립트를 포함하면- jstz.olson.timezones변수 에 시간대 목록을 가져올 수 있습니다 .

그리고 다음 코드는 클라이언트 브라우저의 시간대를 결정하는 데 사용됩니다.

var tz = jstz.determine();
tz.name();

jstz를 즐기십시오!


3

이름으로 시간대 검색 (예 : "미국 / 뉴욕")

moment.tz.guess();

9
종속성없이 간단하게 가능하다는 점을 언급하십시오.Intl.DateTimeFormat().resolvedOptions().timeZone
user2923322

1
네, 비록 moment-js는 또한 그 기능을 지원하지 않는 "브라우저"에 대해 TZ를 추측합니다. :)
Ferran Maylinch

IE11은에 Intl.DateTimeFormat().resolvedOptions().timeZone다시 제공 undefined하지만, moment.tz.guess()올바른 값 반환
Antoni4


0

이것은 GMT이전 자바 스크립트에서 시간대 코드 (예 :)를 가져옵니다 ( 예전 엔진에서 Google 앱 스크립트를 사용하고 있습니다).

function getTimezoneName() {
  return new Date().toString().get(/\((.+)\)/);
}

누군가 필요한 경우를 대비하여 여기에 넣는 것입니다.


1
나는 그것이 UTC/ 에서만 작동한다고 생각합니다 GMT. 다른 사람의 철자가 나와있는 것 같습니다. 예 : Pacific Daylight Time.
Ian Dunn

-1

이 코드는 여기 에서 참조 하십시오.

<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js">
</script>
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jstimezonedetect/1.0.4/jstz.min.js">
</script>
<script type="text/javascript">
  $(document).ready(function(){
    var tz = jstz.determine(); // Determines the time zone of the browser client
    var timezone = tz.name(); //'Asia/Kolhata' for Indian Time.

    alert(timezone);
});
</script>

-5

javascript에서 Date.getTimezoneOffset () 메소드는 현재 로케일에 대해 UTC로부터의 시간대 오프셋을 분 단위로 반환합니다.

var x = new Date();
var currentTimeZoneOffsetInHours = x.getTimezoneOffset() / 60;

Moment'timezone은 유용한 도구가 될 것입니다. http://momentjs.com/timezone/

시간대 간 날짜 변환

var newYork    = moment.tz("2014-06-01 12:00", "America/New_York");
var losAngeles = newYork.clone().tz("America/Los_Angeles");
var london     = newYork.clone().tz("Europe/London");

newYork.format();    // 2014-06-01T12:00:00-04:00
losAngeles.format(); // 2014-06-01T09:00:00-07:00
london.format();     // 2014-06-01T17:00:00+01:00

4
당신은 그 질문을 이해하지 못했습니다.
srsajid

3
코드 샘플은 원래 질문과 관련이 없습니다. 이 라이브러리를 사용하여 사용자의 현재 시간대 이름을 반환하는 방법은 무엇입니까?
Joe White
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.