【问题标题】:How to check if obj is of type luxon?如何检查 obj 是否属于 luxon 类型?
【发布时间】:2018-10-25 05:36:27
【问题描述】:

我正在为 Angular Material 编写一个日期适配器,如果提供的对象是 luxon DateTime,则需要一个返回布尔值的函数。

这样的事情(从那一刻起):

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;
      }
  }

【问题讨论】:

    标签: luxon


    【解决方案1】:

    我觉得你的代码没问题,我建议你可以使用原生的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 方法

    检查对象是否为 DateTime。跨上下文边界工作

    所以更新的解决方案可以是:

    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>

    由于issue,从v.1.6.0v.1.8.3 isDateTime 将给出undefined 而不是false

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-10
      • 2011-03-21
      • 2012-10-02
      • 2010-12-25
      相关资源
      最近更新 更多