18

我正在使用ng-bootstrap datepicker,但是当我保存表单时,日期被保存为。

date: {
  day: 01,
  month: 12,
  year: 16
}

我希望我能把它保存为更像的东西"2016-11-23T00:39:31.768Z"

这是我的实现:

<div class="input-group">
  <button class="input-group-btn" (click)="d.toggle()" >
    <md-icon svgSrc="assets/images/calendar-plus.svg" style="cursor: pointer;"></md-icon>
  </button>
  <input class="form-control" placeholder="dd-mm-yyyy" name="dp" formControlName="due_date" navigation="arrows" ngbDatepicker #d="ngbDatepicker">
</div>

和form.component:

constructor( private fb: FormBuilder ) {
    this.form = this.fb.group({
      due_date: [''],
    });
  }
4

3 回答 3

26

您使用的是 ng-bootstrap 而不是 ng2-bootstrap (不同的组)。它背后的代码使用NgbDateStructwhich 是一个对象{ day, month, year }

提交时,您需要连接并将值更改为其他值,例如:

onSubmit(): {
    let ngbDate = this.form.controls['due_date'].value;
    let myDate = new Date(ngbDate.year, ngbDate.month-1, ngbDate.day);
    let formValues = this.form.value;
    formValues['due_date'] = myDate;
    <...>
    http.post(url, formValues);
}

https://ng-bootstrap.github.io/#/components/datepicker

NgbDatepicker 和 NgbInputDatepicker 指令模型的 NgbDateStruct 接口

特性

day 类型:number 月份中的第几天,从 1 开始

月份 类型:数字 月份,我们使用 ISO 8601 的默认日历: 1=Jan ... 12=Dec

year 类型:数字 年份,例如 2016

于 2016-11-24T01:08:50.370 回答
24

正如@silentsod 提到的,您需要将日期选择器使用的日期对象从NgbDateStruct格式转换为string格式。ng-bootstrap 提供了将NgbDateStruct格式中的日期转换为ISO 8601格式(yyyy-mm-dd)的功能。如果使用该格式,您不必自己编写:

import {NgbDateParserFormatter} from '@ng-bootstrap/ng-bootstrap';

...

constructor(private ngbDateParserFormatter: NgbDateParserFormatter; ... ) {
    ...
}

...

onSubmit(): {
    let ngbDate = this.form.controls['due_date'].value;
    let myDate = this.ngbDateParserFormatter.format(ngbDate); // e.g. myDate = 2017-01-01
    ...
}

请参阅:https ://github.com/ng-bootstrap/ng-bootstrap/blob/master/src/datepicker/ngb-date-parser-formatter.ts

于 2017-01-03T12:41:58.447 回答
2

您可以实现自己的方法将其转换为您需要的 DD-MM-YYYY 格式。

或者根据 return 语句中元素的顺序和分隔符,您可以创建您希望的任何其他格式。

执行:

formatDate(d: NgbDate): string {
  if (d === null) {
    return null;
  }

  return [
    (d.day < 10 ? ('0' + d.day) : d.day),
    (d.month < 10 ? ('0' + d.month) : d.month),
    d.year
  ].join('-');
}
于 2019-04-02T06:30:03.753 回答