2016-03-02 3 views
119

Я использую дату, чтобы отформатировать дату, но я просто не могу получить точный формат, который я хочу, без обходного пути. Я понимаю каналы неправильно или просто невозможно?Как отформатировать дату как dd/MM/yyyy в Angular 2 используя трубы?

//our root app component 
import {Component} from 'angular2/core' 

@Component({ 
    selector: 'my-app', 
    providers: [], 
    template: ` 
    <div> 
     <h2>Hello {{name}}</h2> 
     <h3>{{date | date: 'ddMMyyyy'}}, should be 
     {{date | date: 'dd'}}/{{date | date:'MM'}}/{{date | date: 'yyyy'}}</h3> 

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

plnkr view

+2

В настоящее время труба 'date' имеет несколько выпусков. –

+0

Этот кандидат на выпуск все еще чувствует себя немного незавершенным. Это вторая проблема, которую я наткнулся через 2 дня. Надеюсь, они скоро ее исправит. Создание собственных каналов для этого варианта, но оно немного напоминает дублирование .. и вы можете удалить его через несколько месяцев. –

+0

Возможный дубликат [Как установить локаль в DatePipe в Angular2?] (Http: // stackoverflow .com/вопросы/34904683/how-to-set-locale-in-datepipe-in-angular2) – nsbm

ответ

197

Pipe формат даты ошибка фиксируется в угловых 2.0.0-РК-2, this Pull Request.

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

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

Примеры:

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

Plunker Angular 5.2.x


Следующая версия:

Plunker Angular 6.0.x


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

Plunker Angular 2.x

Plunker Angular 4.x


More info in documentation DatePipe

+1

спасибо, просто хотел бы добавить дополнительные советы по выпуску формата IE11 ++, ср. https://stackoverflow.com/questions/39728481/angular2-date-pipe-does-not-work-in-ie-11-and-edge-13-14 – boly38

+0

В Угловом 5 это, по-видимому, было решено @ boly38, следуйте обновить в ответ. И мой ответ в теме связан: https://stackoverflow.com/a/46218711/2290538 –

9

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

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'); 
     } 
    } 
} 
+0

Я новичок в угловом 2, и у меня проблемы с этим , Я добавил его в свой собственный файл TS (скомпилирован в js). Я пробовал несколько вещей, включая добавление его в качестве поставщика в компонент приложения, а затем в конструкторе моего дочернего компонента, но я не мог его уйти. Ошибка; Msgstr "Не удалось найти трубку dateFormat". Можете ли вы дать мне краткий обзор того, как это осуществить, пожалуйста. Вот пакеты, которые я использую «зависимости»: {«angular2»: «2.0.0-beta.17», «systemjs»: «0.19.25», «es6-shim»: «^ 0.35.0» , «отражение-метаданные»: «0.1.2», «rxjs»: «5.0.0-beta.2», «zone.js»: «0,6.10»}, –

+0

Можете ли вы, пожалуйста, прокомментировать код я сделаю коррекцию. Пожалуйста, используйте последнюю версию angular2 –

+0

@Deepakrao Что здесь «pt»? И как мне назвать этот канал в моем компоненте? например let date = new DateFormat(). transform (input); Пожалуйста, поправьте меня. И что, если я хочу отображать hh: mm, т.е. time – Protagonist

3

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

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

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

, это довольно читаемый взлом для бета-версий, не знаю, почему он был downvoted, но я верну его к нулю;) –

48

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

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

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

Запомните строчной на дату и год:

d- date 
M- month 
y-year 
+0

Это по какой-то причине кажется быть очень тяжелым. Мы делаем то же самое (при обнаружении изменений), и оно берет 75% времени выполнения нашего приложения. – sixtyfootersdude

+7

С Angular 2.1.1 эта ошибка вызывается 'Поставляемые параметры не соответствуют какой-либо сигнатуре целевого вызова.' На 'new DatePipe() ' – saiy2k

+6

Вы можете использовать что-то вроде' new DatePipe ('en-US'); ' –

1

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

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

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

В аргументах параметр, который вы можете поместить свой формат даты, как: "дд/мм/гггг"

+0

ссылка не работает, ссылка теперь https://github.com/urish/angular2-moment/blob/master/src/date-format .pipe.ts – Tony

10

I всегда используйте 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') 

    } 
} 

И в представлении:

<p>{{ date | formatDate }}</p> 
+2

Библиотека 'moment' слишком велика для небольшой работы, такой как формат! –

10

Вы можете добиться этого с помощью с помощью простого пользовательского трубы.

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 }} 

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

Custom Pipe examples

 Смежные вопросы

  • Нет связанных вопросов^_^