JavaScript检查时区名称是否有效

时间:2017-05-22 14:36:00

标签: javascript timezone timezone-offset

有没有办法在不使用外部库的情况下检查JavaScript中的时区名称是否有效?

当用户在文本字段中输入时区名称时,我想验证区域是否有效?

我知道我们可以使用moment-timezone库轻松完成。但我不想使用任何额外的库。我正在寻找纯粹的JavaScript方式。

isValidTimeZone(name) {
//return true/false  
}

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

2 个答案:

答案 0 :(得分:12)

在完全支持ECMA-402(ECMAScript国际化API)中的IANA时区标识符的环境中,您可以尝试在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-timezone

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

当然,您总是可以提取自己的时区名称数组(可能使用moment.tz.names()并对其进行测试。

答案 1 :(得分:3)

在打字稿中,您还可以采用更简洁的方式

<svg viewbox="-5 -5 110 110" height="500" width="500">
  <polygon points="10, 0, 100, 0, 100, 90, 90, 100, 0, 100, 0, 10" style="fill:lime;stroke:purple;stroke-width:4" />
</svg>

您还需要导入

    public static isValidTimezone(timezone: string): boolean {
            return moment.tz.zone(timezone) != null;
        }