JavaScript检查时区名称是否有效

JavaScript检查时区名称是否有效,javascript,timezone,timezone-offset,Javascript,Timezone,Timezone Offset,有没有一种方法可以在不使用外部库的情况下检查JavaScript中的时区名称是否有效 当用户在文本字段中输入时区名称时,我想验证时区是否有效 我知道我们可以很容易地使用矩时区库。但我不想使用任何额外的图书馆。我正在寻找纯JavaScript的方式 isValidTimeZone(name) { //return true/false } isValidTimeZone('Asia/Colombo'); //returns true isValidTimeZone('America/Los_

有没有一种方法可以在不使用外部库的情况下检查JavaScript中的时区名称是否有效

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

我知道我们可以很容易地使用矩时区库。但我不想使用任何额外的图书馆。我正在寻找纯JavaScript的方式

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

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

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

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

在typescript中,您还可以以更干净的方式进行测试

    public static isValidTimezone(timezone: string): boolean {
            return moment.tz.zone(timezone) != null;
        }
您还需要导入

import moment = require("moment-timezone");

根据友好位置名称(如您在问题中所示),时区无效。根据时区偏移量,时区有效。用户输入时区名称(例如:亚洲/科伦坡)。稍后我需要在Highcharts中使用它。所以需要验证它。用户将不会输入+05:30。时区对您有效吗?
America/Anaheim
有效吗?因为我认为您不是指“大陆/城市名称”中的任何内容格式自动有效。你必须有一些数据库来测试。你想维护自己吗?为了避免使用库似乎有很多麻烦。它们不仅仅是“友好”名称,它们是tz数据库中的标识符。列表如下: