Как отформатировать дату как dd / MM / yyyy в Angular 2 с помощью труб?

Я использую date pipe для форматирования даты, но я просто не могу получить точный формат, который я хочу, без обходного пути. Я понимаю каналы неправильно или просто невозможно?

//our root app component import {Component} from 'angular2/core' @Component({ selector: 'my-app', providers: [], template: ` 

Hello {{name}}

{{date | date: 'ddMMyyyy'}}, should be {{date | date: 'dd'}}/{{date | date:'MM'}}/{{date | date: 'yyyy'}}

`, directives: [] }) export class App { constructor() { this.name = 'Angular2' this.date = new Date(); } }

Изображение plnkr

Ошибка формата даты в канале, установленная в Angular 2.0.0-rc.2, этот запрос Pull .

Теперь мы можем сделать обычный путь:

 {{valueDate | date: 'dd/MM/yyyy'}} 

Примеры:

Текущая версия:

Plunker Angular 6.xx


Старые версии:

Plunker Angular 2.x

Plunker Angular 4.x


Дополнительная информация в документации DatePipe

Импортируйте DatePipe из углового / общего, а затем используйте приведенный ниже код:

 var datePipe = new DatePipe(); this.setDob = datePipe.transform(userdate, 'dd/MM/yyyy'); 

где userdate будет вашей строкой даты. Посмотрите, поможет ли это.

Обратите внимание на строчные данные для даты и года:

 d- date M- month y-year 

РЕДАКТИРОВАТЬ

Вы должны передать строку locale в качестве аргумента DatePipe, в последнем угловом. Я тестировал в угловом 4.x

Например:

 var datePipe = new DatePipe('en-US'); 

Вы можете достичь этого, используя простой пользовательский канал.

 import { Pipe, PipeTransform } from '@angular/core'; import { DatePipe } from '@angular/common'; @Pipe({ name: 'dateFormatPipe', }) export class dateFormatPipe implements PipeTransform { transform(value: string) { var datePipe = new DatePipe("en-US"); value = datePipe.transform(value, 'dd/MM/yyyy'); return value; } } {{currentDate | dateFormatPipe }} 

Преимущество использования настраиваемой трубы заключается в том, что если вы хотите в будущем обновить формат даты, вы можете перейти и обновить свой собственный канал, и он будет отражать все где угодно.

Примеры пользовательских труб

Я всегда использую Moment.js, когда мне нужно использовать даты по любой причине.

Попробуй это:

 import { Pipe, PipeTransform } from '@angular/core' import * as moment from 'moment' @Pipe({ name: 'formatDate' }) export class DatePipe implements PipeTransform { transform(date: any, args?: any): any { let d = new Date(date) return moment(d).format('DD/MM/YYYY') } } 

И в перспективе:

 

{{ date | formatDate }}

Я использую это временное решение:

 import {Pipe, PipeTransform} from "angular2/core"; import {DateFormatter} from 'angular2/src/facade/intl'; @Pipe({ name: 'dateFormat' }) export class DateFormat implements PipeTransform { transform(value: any, args: string[]): any { if (value) { var date = value instanceof Date ? value : new Date(value); return DateFormatter.format(date, 'pt', 'dd/MM/yyyy'); } } } 

Единственное, что сработало для меня, было вдохновлено здесь: https://stackoverflow.com/a/35527407/2310544

Для чистого dd / MM / yyyy это сработало для меня, с угловым 2-бета-16:

 {{ myDate | date:'d'}}/{{ myDate | date:'MM'}}/{{ myDate | date:'y'}} 

Я думаю, что это потому, что локаль жестко закодирована в DatePipe . См. Эту ссылку:

И сейчас нет возможности обновить эту локаль путем настройки.

Вы можете также использовать momentjs для такого рода вещей. Momentjs лучше всего разбирать, проверять, манипулировать и отображать даты в JavaScript.

Я использовал эту трубку у Urish, которая отлично подходит для меня:

https://github.com/urish/angular2-moment/blob/master/src/DateFormatPipe.ts

В параметре args вы можете поместить свой формат даты, например: «dd / mm / yyyy»

Если кто-то ищет время и часовой пояс, это для вас

  {{data.ct | date :'dd-MMM-yy h:mm:ss a '}} 

добавить z для часового пояса в конце даты и времени

  {{data.ct | date :'dd-MMM-yy h:mm:ss a z'}} 

Каналы даты не ведут себя корректно в Angular 2 с браузером Typcript для браузера Safari на MacOS и iOS. Недавно я столкнулся с этой проблемой. Мне пришлось использовать момент js здесь для решения проблемы.

Здесь вы можете найти более подробную информацию о дате, например, форматах.

Если вы хотите использовать его в своем компоненте, вы можете просто сделать

 pipe = new DatePipe('en-US'); // Use your own locale 

Теперь вы можете просто использовать свой метод преобразования, который будет

 const now = Date.now(); const myFormattedDate = this.pipe.transform(now, 'short'); 
  • Связывает Angularjs с новым элементом html динамически
  • Как определить изменение маршрута в Угловом?
  • Просмотр не обновляется при изменении в Angular2
  • Angular2: 2 услуги в зависимости друг от друга
  • Как применять фильтры к * ngFor?
  • Как связать raw html в Angular2
  • Предупреждать пользователя о несохраненных изменениях перед выходом на страницу
  • Как я действительно развертываю приложение Angular 2 + Typcript + systemjs?
  • Как получить текущий маршрут
  • Угловой фильтр 2 / список поиска
  • Angular2 - как вызвать функцию компонента извне приложения
  • Давайте будем гением компьютера.