itsource

JavaScript에서 시간대 이름을 얻으려면 어떻게 해야 하나요?

mycopycode 2022. 9. 23. 00:17
반응형

JavaScript에서 시간대 이름을 얻으려면 어떻게 해야 하나요?

타임존 오프셋을 취득하는 방법은 알고 있습니다만, 필요한 것은 「America/New York」등의 것을 검출하는 것입니다.JavaScript에서 검출이 가능합니까?아니면 오프셋에 근거해 게스트를 작성해야 합니까?

Internationalization API는 사용자 시간대 가져오기를 지원하며 현재 모든 브라우저에서 지원됩니다.

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

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

하지만 대부분의 상향식 답변이 시간대를 얻는 가장 좋은 방법일 것입니다.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 오프셋을 반환합니다(예:GMT+07:00이름 대신 )를 사용합니다.하지만 나는 그것이 여전히 예비책으로 읽힐 수 있다고 생각한다.

추신: IE11에서는 동작하지 않습니다.Intl...솔루션.

현재 사용자의 언어로 결과가 나올 가능성은 희박합니다.

console.log(new Date().toLocaleDateString(undefined, {day:'2-digit',timeZoneName: 'long' }).substring(4));

Moment.js 를 이미 사용하고 있는 경우는, 다음의 타임 존명을 추측할 수 있습니다.

moment.tz.guess(); // eg. "America/New York"

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

리포지토리를 여기에서 포크 또는 복제합니다.https://bitbucket.org/pellepim/jstimezonedetect

스크립트를 포함하면 타임존 목록을 가져올 수 있습니다.jstz.olson.timezones변수.

그리고 다음 코드를 사용하여 클라이언트브라우저의 타임존을 결정합니다.

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

jstz를 즐겨라!

http://www.timeanddate.com/time/zones/의 맵핑테이블을 사용하여 자신의 코드를 간단하게 작성할 수 있습니다.

또는 moment-timezone 라이브러리를 사용합니다.

zone.name; // America/Los_Angeles

또는 이 라이브러리:https://github.com/Canop/tzdetect.js

console.log(new Date().toLocaleDateString(undefined, {day:'2-digit',timeZoneName: 'long' }).substring(4).match(/\b(\w)/g).join(''))

"America/New York"와 같은 것을 감지하려면new LocalZone()룩슨 도서관에서요.

import { LocalZone } from 'luxon';

const zoneName = new LocalZone().name;

이것은 시간대 코드를 가져옵니다(예:GMT이전 javascript에서는 (구글 앱 스크립트를 오래된 엔진에서 사용하고 있습니다) :

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

누군가 필요할 때를 대비해서 여기 놔두는 거예요

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

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

모멘트 타임존은 유용한 도구가 될 것입니다.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

언급URL : https://stackoverflow.com/questions/9772955/how-can-i-get-the-timezone-name-in-javascript

반응형