2017-05-22 10 views
1

外部ライブラリを使用せずにJavaScriptでタイムゾーン名が有効かどうかを確認する方法はありますか?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

、あなたはDateTimeFormat(またはtoLocaleStringへのオプションで)でタイムゾーンを使用して試すことができ、それがスローされます有効なタイムゾーンでない場合は例外です。これを使用して妥当性をテストできますが、サポートされている環境でのみ有効です。ご使用の環境が保証できない場合

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()とそれに対してテストしてください

関連する問題