使用 momentjs 检测无效的时区



有没有办法用momentjs检测无效的时区?如果我这样做:

const m = moment.tz("01/01/2019 5:30pm", "MM/DD/YYYY h:mma", true, "invalid timezone");
m.isValid(); //true

有没有办法isValid()返回false,或者有没有其他方法可以检测时区无效?

它记录以下内容:Moment Timezone has no data for invalid timezone. See http://momentjs.com/timezone/docs/#/data-loading/但我如何以编程方式判断?

如果您使用的是完全创建的Moment对象,那么Jaromanda X给出的答案就是要走的路。 但是,如果您只是测试时区名称是否有效(并加载到 moment(中,则无需构造 Moment 对象即可执行此操作。 只需测试时区名称本身。

if (!moment.tz.zone('FooBarTimeZone')) {
    console.log('Invalid time zone');
} else {
     console.log('Valid time zone');
}

请注意,这是有效的,因为 moment.tz.zone 函数返回一个Zone对象(与任何对象一样是真实的(或null(它是假的(。

另请注意,最初有一个 moment.tz.zoneExists 函数,它仍然有效 - 但现在将给出弃用消息,描述使用上述技术。

检查是否m.tz() === undefined

let m = moment.tz("01/01/2019 5:30pm", "MM/DD/YYYY h:mma", true, "invalid timezone");
console.log(`"invalid timezone" results in .tz() == ${m.tz()}`)
m = moment.tz("01/01/2019 5:30pm", "MM/DD/YYYY h:mma", true, "Australia/Melbourne");
console.log(`"Australia/Melbourne" results in .tz() == ${m.tz()}`)
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.20.1/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.14/moment-timezone-with-data.min.js"></script>

当然,您也可以检查区域是否存在

console.log(`"invalid zone name is ${moment.tz.zone("invalid zone name")}`);
console.log(`"australia/nsw" is ${JSON.stringify(moment.tz.zone("australia/nsw"), null, 4)}`);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.20.1/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.14/moment-timezone-with-data.min.js"></script>

相关内容

  • 没有找到相关文章

最新更新