如何检查 obj 是否属于 luxon 类型?
How to check if obj is of type luxon?
我正在为 Angular Material 编写日期适配器,如果提供的对象是 luxon DateTime,则需要一个 returns 布尔值的函数。
像这样的事情(从那一刻起):
isDateInstance(obj: any): boolean {
return moment.isMoment(obj);
}
到目前为止,我所拥有的是这样的 - 这够好了吗?:
isDateInstance(obj: any): boolean {
try {
const luxonObject = DateTime.fromObject(obj);
return luxonObject.isValid;
} catch (error) {
return false;
}
}
我认为你的代码很好,我建议你可以使用原生 instanceof
。
const DateTime = luxon.DateTime;
function isDateInstance(obj) {
return obj instanceof DateTime;
}
console.log( isDateInstance('') );
console.log( isDateInstance({}) );
console.log( isDateInstance(new Date()) );
console.log( isDateInstance(DateTime.local()) );
<script src="https://moment.github.io/luxon/global/luxon.min.js"></script>
编辑:
Luxon 在 v.1.6.0
中添加了 isDateTime
方法
Check if an object is a DateTime. Works across context boundaries
所以更新的解决方案可以是:
const DateTime = luxon.DateTime;
function isDateInstance(obj) {
return DateTime.isDateTime(obj);
}
console.log( isDateInstance('') );
console.log( isDateInstance({}) );
console.log( isDateInstance(new Date()) );
console.log( isDateInstance(DateTime.local()) );
<script src="https://cdn.jsdelivr.net/npm/luxon@1.10.0/build/global/luxon.js"></script>
从 v.1.6.0
到 v.1.8.3
isDateTime
将给出 undefined
而不是 false
由于 issue.
我正在为 Angular Material 编写日期适配器,如果提供的对象是 luxon DateTime,则需要一个 returns 布尔值的函数。
像这样的事情(从那一刻起):
isDateInstance(obj: any): boolean {
return moment.isMoment(obj);
}
到目前为止,我所拥有的是这样的 - 这够好了吗?:
isDateInstance(obj: any): boolean {
try {
const luxonObject = DateTime.fromObject(obj);
return luxonObject.isValid;
} catch (error) {
return false;
}
}
我认为你的代码很好,我建议你可以使用原生 instanceof
。
const DateTime = luxon.DateTime;
function isDateInstance(obj) {
return obj instanceof DateTime;
}
console.log( isDateInstance('') );
console.log( isDateInstance({}) );
console.log( isDateInstance(new Date()) );
console.log( isDateInstance(DateTime.local()) );
<script src="https://moment.github.io/luxon/global/luxon.min.js"></script>
编辑:
Luxon 在 v.1.6.0
中添加了 isDateTime
方法
Check if an object is a DateTime. Works across context boundaries
所以更新的解决方案可以是:
const DateTime = luxon.DateTime;
function isDateInstance(obj) {
return DateTime.isDateTime(obj);
}
console.log( isDateInstance('') );
console.log( isDateInstance({}) );
console.log( isDateInstance(new Date()) );
console.log( isDateInstance(DateTime.local()) );
<script src="https://cdn.jsdelivr.net/npm/luxon@1.10.0/build/global/luxon.js"></script>
从 v.1.6.0
到 v.1.8.3
isDateTime
将给出 undefined
而不是 false
由于 issue.