55

我在弹出窗口中使用日期选择器(ng-boostrap),我想将日期格式更改为dd-mm-yyyy.

似乎可以通过实现一个 newNgbDateParserFormatter来替换 default来解决NgbDateISOParserFormatter

但我想知道是否还有其他方法。

更新:

使用 Moment.js的一个小实现(NgbDateParserFormatter使用 ng-bootstrap 的 1.0.0-alpha.14 版本测试):

import {NgbDateParserFormatter, NgbDateStruct} from '@ng-bootstrap/ng-bootstrap';
import * as moment from 'moment';

export class NgbDateMomentParserFormatter extends NgbDateParserFormatter {
    constructor(private momentFormat: string) {
        super();
    };
    format(date: NgbDateStruct): string {
        if (date === null) {
            return '';
        }
        let d = moment({ year: date.year, 
                         month: date.month - 1, 
                         date: date.day });
        return d.isValid() ? d.format(this.momentFormat) : '';
    }

    parse(value: string): NgbDateStruct {
        if (!value) {
            return null;
        }
        let d = moment(value, this.momentFormat);
        return d.isValid() ? { year: d.year(), 
                               month: d.month() + 1, 
                               day: d.date() } : null;
    }
}

在一个模块中,您使用工厂来包含提供程序,以将日期格式指示为参数:

---

@NgModule({

  ---

  providers: [
    { 
      provide: NgbDateParserFormatter, 
      useFactory: () => { return new NgbDateMomentParserFormatter("DD-MM-YYYY") } 
    }
  ]

  ---

})
4

2 回答 2

23

截至今天,实施自定义NgbDateParserFormatter是最好的方法。所以是的,这是一个正确的方法。

将来我们可能会有一个更复杂的实现NgbDateParserFormatter,您将能够只传递所需的格式(例如yyyy-MM-dd)。添加此功能将取决于用户的兴趣。

您还可以在https://github.com/ng-bootstrap/ng-bootstrap/issues/754#issuecomment-247767027中查看更多背景信息

于 2016-09-17T12:41:46.547 回答
1

创建自定义解析器格式化程序。

import { NgbDateParserFormatter, NgbDateStruct } from '@ng-bootstrap/ng-bootstrap';
import { Injectable } from '@angular/core';

@Injectable()
export class NgbDateCustomParserFormatter extends NgbDateParserFormatter {

  format(date: NgbDateStruct): string {
    return date ? `${isNumber(date.day) ? padNumber(date.day) : ''}-${isNumber(date.month) ? padNumber(date.month) : ''}-${date.year}` : '';
  }
}

在@NgModule 中设置自定义解析器格式化程序的提供程序。

providers: [
    {provide: NgbDateParserFormatter, useClass: NgbDateCustomParserFormatter}
]

api中所述

于 2019-02-27T07:19:12.900 回答