You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ngx-Mat-DateTimePicker的NgxMatLuxonAdapter不可变对象设值问题求解

解决方案

核心原因是你对NgxMatDateAdapter接口的方法签名理解有误,该库的时间设置类方法设计完全兼容Luxon的不可变特性,不需要修改原对象:

  1. 修正方法返回类型
    这三个set方法的返回类型并不是void,而是泛型T(即你适配的DateTime类型),你只需要返回修改后的新DateTime实例即可,正确实现如下:
    setHour(date: DateTime, value: number): DateTime {
      return date.set({ hour: value });
    }
    
    setMinute(date: DateTime, value: number): DateTime {
      return date.set({ minute: value });
    }
    
    setSecond(date: DateTime, value: number): DateTime {
      return date.set({ second: value });
    }
    
  2. 补充必要的模块配置
    确保你在对应模块的providers中正确注册了自定义Adapter和对应的日期格式配置:
    import { NGX_MAT_DATE_ADAPTER } from '@angular-material-components/datetime-picker';
    import { MyDateAdapter } from './path-to-your-adapter';
    // 可直接复用项目中已有的Luxon日期格式配置
    export const LUXON_DATE_FORMATS = {
      parse: {
        dateInput: 'yyyy-MM-dd HH:mm:ss',
      },
      display: {
        dateInput: 'yyyy-MM-dd HH:mm:ss',
        monthYearLabel: 'yyyy年MM月',
        dateA11yLabel: 'yyyy-MM-dd HH:mm:ss',
        monthYearA11yLabel: 'yyyy年MM月',
      }
    };
    
    @NgModule({
      providers: [
        { provide: NGX_MAT_DATE_ADAPTER, useClass: MyDateAdapter },
        { provide: MAT_DATE_FORMATS, useValue: LUXON_DATE_FORMATS }
      ]
    })
    export class YourModule {}
    

如果你使用的是旧版本库,接口确实定义为void返回,直接升级到@angular-material-components/datetime-picker的最新稳定版即可,旧版本的接口设计存在缺陷,已在后续版本优化适配了不可变日期库的使用场景。

内容的提问来源于stack exchange,提问作者clash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 07:09:03