Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 带角度材质的日期格式_Angular_Typescript_Angular Material - Fatal编程技术网

Angular 带角度材质的日期格式

Angular 带角度材质的日期格式,angular,typescript,angular-material,Angular,Typescript,Angular Material,我有一个带角度材质的工作日期选择器,但我想用匈牙利日期符号格式化它的日期。比如今天是2019.01.25。目前日期选择器的格式为2019年1月25日。我试着使用StackOverflow和Google的例子,但不是我的格式,而是2019年1月25日星期五。有什么问题 app.module.ts import { BrowserModule } from '@angular/platform-browser'; import { NgModule } from '@angular/core';

我有一个带角度材质的工作日期选择器,但我想用匈牙利日期符号格式化它的日期。比如今天是2019.01.25。目前日期选择器的格式为2019年1月25日。我试着使用StackOverflow和Google的例子,但不是我的格式,而是2019年1月25日星期五。有什么问题

app.module.ts

 import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { ReactiveFormsModule, FormsModule } from '@angular/forms';
import { ServerService } from './server.service';
import { HttpModule } from '@angular/http';

import { AppComponent } from './app.component';

import {
  MatButtonModule,
  MatFormFieldModule,
  MatInputModule,
  MatRippleModule,
  MatAutocompleteModule,
  MatDatepickerModule,
  MatNativeDateModule,
  MAT_NATIVE_DATE_FORMATS,
  DateAdapter
} from '@angular/material';

import {BrowserAnimationsModule} from '@angular/platform-browser/animations';

import { CustomDateAdapter} from './app.customdateadapter';

const MY_DATE_FORMATS = {
  parse: {
     dateInput: {month: 'short', year: 'numeric', day: 'numeric'}
  },
  display: {
     dateInput: 'input',
     monthYearLabel: {year: 'numeric', month: 'short'},
     dateA11yLabel: {year: 'numeric', month: 'long', day: 'numeric'},
     monthYearA11yLabel: {year: 'numeric', month: 'long'},
  }
};

@NgModule({
  exports: [
    MatButtonModule,
    MatFormFieldModule,
    MatInputModule,
    MatRippleModule,
    MatAutocompleteModule,
    ReactiveFormsModule,
    BrowserAnimationsModule,
    FormsModule,
    HttpModule,
    MatDatepickerModule,
    MatNativeDateModule
  ],
  declarations: [],
  imports: []
})
export class MaterialModule {}

@NgModule({
  declarations: [],
  imports: [],
  exports: [MatDatepickerModule, MatNativeDateModule],
  providers: [
     {
        provide: DateAdapter, useClass: CustomDateAdapter
     },
     {
        provide: MAT_NATIVE_DATE_FORMATS, useValue: MY_DATE_FORMATS
     }
  ]
})

export class DatePickerModule {

}

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    MaterialModule,
    BrowserModule,
    DatePickerModule
  ],
  providers: [ServerService],
  bootstrap: [
    AppComponent,
  ],
  schemas: [],
})
export class AppModule { }
app.customdateadapter.ts

import { NativeDateAdapter } from '@angular/material';

export class CustomDateAdapter extends NativeDateAdapter {
  format(date: Date, displayFormat: Object): string {
     if (displayFormat === 'input') {
        const day = date.getUTCDate();
        const month = date.getUTCMonth() + 1;
        const year = date.getFullYear();

        return `${year}.${month}.${day}`;
     } else {
        return date.toDateString();
     }
  }

}

好的,你有一个目标。不能将其与普通字符串进行比较。改用这种方式尝试,并检查字段
year
是否存在。因此,您可以确保拥有正确的对象:

import { NativeDateAdapter } from '@angular/material';

export class CustomDateAdapter extends NativeDateAdapter {
  format(date: Date, displayFormat: any): string {
     if (displayFormat.year) {
        return displayFormat.year + '.' + displayFormat.month + '.' + displayFormat.day;
     } else {
        return date.toDateString();
     }
  }
}
或与您的日期格式

import { NativeDateAdapter } from '@angular/material';

export class CustomDateAdapter extends NativeDateAdapter {
  format(date: Date, displayFormat: any): string {
     if (displayFormat.year) {
         const day = date.getUTCDate();
         const month = date.getUTCMonth() + 1;
         const year = date.getFullYear();

        return year + '.' + month + '.' + day;
     } else {
        return date.toDateString();
     }
  }
}

format()
中的
displayFormat
的值是多少?它是否曾经变成
输入
?即便如此,它真的是
string
类型吗?如果将比较更改为
displayFormat==“input”
它是一个对象,该怎么办。在console.log(displayFormat)上,Chrome显示“{year:“numeric”,month:“numeric”,day:“numeric”}不随==更改,即使您将其设置为
any
如果您将其与普通字符串进行检查,比较也将失败。将显示格式更改为
any
会使代码正常工作。如果不进行更改,我将得到
错误TS2339:类型“Object”上不存在属性“year”。
好的,请参阅。我将更改此设置。感谢hint.谢谢你的帮助。:)两个中的第二个有效。:)第一个说“numeric.numeric.numeric”,但第二个是正确的。等等,不,它不是…它变成了所选日期之前的日期。如果我选择今天,那么它是2019.01.24,2019.01.01变成2019.12.31。:(我的例子是sh*******