#angular #typescript #datepicker #angular-material
#angular #typescript #datepicker #angular-материал
Вопрос:
Я использую datepicker, и у меня есть следующий код:
<mat-form-field>
<input matInput
[matDatepicker]="picker"
placeholder="select a date"
(dateChange)="setDate($event.value)">
<mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle>
<mat-datepicker #picker></mat-datepicker>
</mat-form-field>
<mat-form-field>
<input matInput type="time" value="16:30">
</mat-form-field>
<input matInput value="{{ date | date: 'y-MM-dd' }}">
В этом примере выбора даты используется формат даты в США. Я хотел бы использовать австралийский формат даты, который равен дд / мм / гггг. Я могу создать скрытый ввод и преобразовать его в формат гггг-мм-дд для целей базы данных, но я не могу отобразить формат дд / мм / гггг во вводе datepicker. Не могли бы вы помочь мне отобразить формат даты в Австралии вместо формата даты в США в поле выбора данных?
Также является ли хорошей практикой то, как я отправляю dateformat для целей DB?
файл .TS
date: string;
setDate(date: string) {
this.date = date ? date : 'y-MM-dd';
.HTML-файл
input matInput [matDatepicker]="picker" placeholder="select a date"
(dateChange)="setDate($event.value)">
и
<input type="hidden" matInput value="{{ date | date: 'y-MM-dd' }}">
Ответ №1:
Я рекомендую вам не настраивать свои Date
переменные таким образом,
Вы должны определить свой LOCALE_ID
, что означает, что вам не нужно использовать пользовательский формат для ваших Date
(или валюты, времени и т.д.) переменных. Например,
import { LOCALE_ID } from '@angular/core';
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app/app.module';
platformBrowserDynamic().bootstrapModule(AppModule, {
providers: [{provide: LOCALE_ID, useValue: 'en-US' }]
});
Комментарии:
1. Я удалил свой stackblitz , но он все еще не работает. Не могли бы вы посмотреть, где я делаю неправильно?
2. @david83 Кстати, ваш репозиторий stackblitz не является Angular7, я рекомендую вам использовать последнюю версию Angular: stackblitz.com/edit/angular-3h6zsp-itogi2
3. большое вам спасибо. Я обновил свой вопрос. Не могли бы вы сказать мне, является ли хорошей практикой то, как я отправляю dateformat для целей DB
Ответ №2:
в вашем NgModule вы хотите присвоить австралийский язык LOCALE_ID ….
в поставщиках в вашем NgModule добавьте следующее…
{ предоставить: LOCALE_ID, использовать значение: ‘en-au’ }
(убедитесь, что вы импортировали LOCALE_ID).
Комментарии:
1. спасибо за ответ/ Я обновил свою ссылку на stackblitz, но я все еще не могу заставить ее работать. Не могли бы вы заглянуть в main.ts и сказать мне, где я делаю неправильно?
2. Также не могли бы вы сказать мне, является ли хорошей практикой то, как я отправляю dateformat в DB
3. Ваш stackblitz больше не работает ….. но некоторые вещи, которые я заметил, проверяя его…. Вы используете фиксированный формат в своем канале дат…. Если вы хотите, чтобы канал даты форматировался в соответствии с вашим языком, вам нужен «shortDate», «longDate» или какой-либо другой формат, который изменяется в соответствии с вашим языком. Кроме того, не рекомендуется указывать поставщиков в вашем main.ts…. просто поместите его непосредственно в провайдеры вашего NgModule. Что касается наилучшего способа сохранения на сервере, вы можете либо отправить весь объект date (JSON будет преобразован в строку UTC, либо просто использовать .toUTCString() для объекта date .