如何检查对象是否为luxon类型?

8
我正在为Angular Material编写一个日期适配器,需要一个函数,如果提供的对象是luxon DateTime,则返回布尔值。
类似于以下代码(来自moment):
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;
      }
  }
1个回答

7
我认为你的代码很好,建议你可以使用本地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方法,用于检查对象是否为日期时间。该方法可跨上下文边界工作。因此,更新后的解决方案如下:

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.0v.1.8.3期间,由于问题isDateTime将返回undefined而不是false

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接