首页 > 解决方案 > Angular Material Datepicker - 传递的日期不正确

问题描述

我正在为此拉扯我的头发,我知道它已经被回答过一百万次了。但我似乎无法找到解决问题的方法。

我正在使用带有自定义日期提供程序的 Angular 材料日期选择器来格式化日期。

这是它的样子:

import { NativeDateAdapter } from ‘@angular/material’;
import { MatDateFormats } from ‘@angular/material/core’;
export class AppDateAdapter extends NativeDateAdapter {
  format(date: Date, displayFormat: Object): string {
    if (displayFormat === ‘input’) {
      let day: string = date.getDate().toString();
      day = +day < 10 ? ‘0’ + day : day;
      let month: string = (date.getMonth() + 1).toString();
      month = +month < 10 ? ‘0’ + month : month;
      let year = date.getFullYear();
      return `${day}-${month}-${year}`;
    }
    return date.toDateString();
  }
}
export const APP_DATE_FORMATS: MatDateFormats = {
  parse: {
    dateInput: { month: ‘short’, year: ‘numeric’, day: ‘numeric’ },
  },
  display: {
    dateInput: ‘input’,
    monthYearLabel: { year: ‘numeric’, month: ‘numeric’ },
    dateA11yLabel: { year: ‘numeric’, month: ‘long’, day: ‘numeric’
    },
    monthYearA11yLabel: { year: ‘numeric’, month: ‘long’ },
  }
};

现在,问题是,当我通过时02 Jan 2019,日期显示正常。但是在提交数据并检查有效负载时,日期以2019-02-01T22:00:00.000Z. 现在我知道这与 UTC 有关,但我似乎无法解决这个问题。当根本不使用提供者或扩展MomentDateAdapter时,日期会被很好地传递为2019-02-01T00:00:00.000Z

我真正的问题是,当我创建另一个提供程序并扩展MomentDateAdapter而不是 时NativeDateAdapter,一切都很完美。但是,我无法格式化MomentDateAdapter.

我什至尝试返回格式化为moment().utc()但无济于事的日期。

标签: angulardatepickerangular-materialdatetime-formatutc

解决方案


我遇到了类似的问题,但我使用 MomentDateAdapter,当我在组件中收到日期时,我使用 moment 来格式化而不是在适配器中格式化,它似乎可以工作。在我看来,这个问题是由时区引起的,使用 moment().utc() 不会给你当前的时区


推荐阅读