2017-05-22 13 views
1

외부 라이브러리를 사용하지 않고 자바 스크립트에서 시간대 이름이 유효한지 확인하는 방법이 있습니까?JavaScript에서 시간대 이름 유효 여부 확인

사용자가 텍스트 필드에 시간대 이름을 입력하면 영역이 유효한지 여부를 확인하고 싶습니다.

우리는 moment-timezone 라이브러리를 사용하여 쉽게 할 수 있음을 알고 있습니다. 하지만 나는 여분의 라이브러리를 사용하고 싶지 않습니다. 나는 순수한 JavaScript 방식을 찾고있다.

완전히 ECMA-402 (ECMAScript를 국제화 API)에 IANA 시간대 식별자를 지원하는 환경에서
isValidTimeZone(name) { 
//return true/false 
} 

isValidTimeZone('Asia/Colombo'); //returns true 
isValidTimeZone('America/Los_Angeles'); //returns true 
isValidTimeZone('MyTimeZone/ME'); //returns false 
+1

시간대가 친숙한 위치 이름을 기반으로 유효하지 않은 것으로 나타났습니다 (질문에 표시 한 바와 같이) 시간대 오프셋을 기준으로 볼 때 유효합니다 .https : //stackoverflow.com/questions/22609927/정규 표현식 시간대 –

+0

사용자가 시간대 이름을 입력합니다 (예 : Asia/Colombo). 나중에 이것을 Highcharts에서 사용해야합니다. 그래서 이것을 확인해야합니다. 사용자는 +05 : 30을 입력하지 않습니다. –

+0

어떤 시간대가 유효합니까? 미국/애너하임은 유효합니까? 왜냐하면 "Continent/City_Name"형식의 내용이 자동으로 유효하다는 의미는 아니기 때문입니다. 테스트 할 데이터베이스가 있어야합니다. –

답변

4

, 당신은 (또는 toLocaleString의 옵션에서)를 DateTimeFormat의 시간대를 사용하여 시도 할 수 있으며, 그것은 발생합니다 예외가 유효한 시간대가 아닌 경우 이를 사용하여 유효성을 테스트 할 수 있지만 지원되는 환경에서만 유효합니다. 사용자 환경을 보장 할 수없는 경우

function isValidTimeZone(tz) { 
    if (!Intl || !Intl.DateTimeFormat().resolvedOptions().timeZone) { 
     throw 'Time zones are not available in this environment'; 
    } 

    try { 
     Intl.DateTimeFormat(undefined, {timeZone: tz}); 
     return true; 
    } 
    catch (ex) { 
     return false; 
    } 
} 

// Usage: 
isValidTimeZone('America/Los_Angeles') // true 
isValidTimeZone('Foo/Bar') // false 

, 다음 가장 좋은 방법은 물론

!!moment.tz.zone('America/Los_Angeles') // true 
!!moment.tz.zone('Foo/Bar') // false 

, 당신은 항상 함께 아마 (시간대 이름의 자신의 배열을 추출 할 수있는 순간 시간대로 될 것 moment.tz.names() 및 이에 대해 테스트하십시오.