JavaScript 检查时区名称是否有效
JavaScript check if timezone name valid or not
有没有办法在不使用外部库的情况下检查 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
在完全支持 ECMA-402(ECMAScript 国际化 API)中的 IANA 时区标识符的环境中,您可以尝试在 DateTimeFormat
(或 toLocaleString
) 如果它不是有效的时区,它将抛出异常。您可以使用它来测试有效性,但只能在支持它的环境中使用。
function isValidTimeZone(tz) {
if (!Intl || !Intl.DateTimeFormat().resolvedOptions().timeZone) {
throw new Error('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()
并对其进行测试。
在打字稿中你也可以用更简洁的方式来做
public static isValidTimezone(timezone: string): boolean {
return moment.tz.zone(timezone) != null;
}
您还需要导入
import moment = require("moment-timezone");
有没有办法在不使用外部库的情况下检查 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
在完全支持 ECMA-402(ECMAScript 国际化 API)中的 IANA 时区标识符的环境中,您可以尝试在 DateTimeFormat
(或 toLocaleString
) 如果它不是有效的时区,它将抛出异常。您可以使用它来测试有效性,但只能在支持它的环境中使用。
function isValidTimeZone(tz) {
if (!Intl || !Intl.DateTimeFormat().resolvedOptions().timeZone) {
throw new Error('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()
并对其进行测试。
在打字稿中你也可以用更简洁的方式来做
public static isValidTimezone(timezone: string): boolean {
return moment.tz.zone(timezone) != null;
}
您还需要导入
import moment = require("moment-timezone");