有没有办法用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>