我正在使用ng-pick-datetime UI组件作为日期选择器。我禁用了readonly模式,以便使用键盘输入时该输入处于事件状态。

<owl-date-time name="client_birthday" #client_birthday="ngModel"
    [placeHolder]="'DD.MM.YYYY'"
    [locale]="ru"
    [(ngModel)]="client.client_birthday"
    [type]="'calendar'"
    [dataType]="'string'"
    [dateFormat]="'DD.MM.YYYY'"
    [readonlyInput] ="false"
    [autoClose] ="true"
    [inputId]="'client_birthday'"
></owl-date-time>

我尝试使用RU来应用date-fns语言环境:
ru: any;
ruLocale = require('date-fns/locale/ru');
ngOnInit() {
    this.ru = {
        firstDayOfWeek: 1,
        dayNames: [...],
        dayNamesShort: [...],
        monthNames: [...],
        monthNamesShort: [...],
        dateFns: this.ruLocale
    };
}

当我以dd.mm.yyyy格式键入输入时,选择器将day设置为月,将month设置为日,并且年份还可以。因此,它识别的唯一格式是mm.dd.yyyy,它似乎是us语言环境。我的日历语言已按预期更改,但是否也可以为RU配置日期格式?

我将不胜感激任何帮助。

最佳答案

通过输入ng-pick-datetime的输入框,它无法在输入日期时执行您想要的操作。
我经历了ng-pick-datetime组件的实现。
键入时,给定输入通过使用https://date-fns.org/v1.29.0/docs/parse转换为日期对象
这是实现
picker.component.ts/src/picker.component.ts Line-1177方法-parseToDate

/**
     * Parse a object to Date object
     * @param {any} val
     * @return {Date}
     * */
    private parseToDate( val: any ): Date {
        if (!val) {
            return;
        }

        let parsedVal;
        if (typeof val === 'string') {
            parsedVal = parse(val, this.dateFormat, this.now);
        } else {
            parsedVal = val;
        }

        return isValid(parsedVal) ? parsedVal : null;
    }

https://github.com/DanielYKPan/date-time-picker在包json上使用了“date-fns”:“^ 2.0.0-alpha.7g”。它具有用于传递日期格式以解析日期的参数。
parsedVal = parse(val, this.dateFormat, this.now);

但是date-fns的最新版本:“^ 1.29.0”,没有参数可以传递日期格式。因此它也对您的项目失败。请阅读https://date-fns.org/v1.29.0/docs/parse
parse(argument, [options])

09-11 17:45