파이프를 사용하여 날짜를 dd / MM / yyyy로 형식화


257

date파이프를 사용하여 날짜 형식을 지정하고 있지만 해결 방법없이 원하는 형식을 정확하게 얻을 수 없습니다. 파이프를 잘못 이해하고 있거나 불가능한가요?

//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보기


2
date파이프는 현재 몇 가지 문제가 있습니다.
Günter Zöchbauer

이 릴리스 후보는 여전히 약간 미완성 된 느낌입니다. 2 일 만에 두 번째로 우연히 만난 문제입니다. 곧 해결 될 것입니다. 이를 위해 자신 만의 파이프를 만드는 것은 선택 사항이지만 약간 중복 된 느낌입니다. 몇 달 안에 제거 할 수 있습니다.
Maarten Kieft



답변:


466

각도 2.0.0-rc.2에 고정 된 파이프 날짜 형식 버그, 이 풀 요청 .

이제 우리는 일반적인 방법으로 할 수 있습니다 :

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

예 :

현재 버전 :

Example Angular 8.x.x


이전 버전 :

Example Angular 7.x

Example Angular 6.x

Example Angular 4.x

Example Angular 2.x


설명서의 추가 정보 DatePipe


1
감사합니다. IE11 ++ 형식 문제에 대한 추가 팁을 추가하고 싶습니다. stackoverflow.com/questions/39728481/…
boly38 2012 년

Angular 5에서 이것은 @ boly38에서 분명히 해결되었습니다. 대답 업데이트를 따르십시오. 그리고 내 질문에 대한 답변은 stackoverflow.com/a/46218711/2290538
Fernando Leal

API에서 dob : "2019-02-05 00:00:00"으로 날짜가 표시됩니다. 00:00:00을 제거하고 싶습니다. 각도 6의 템플릿 기반 양식이 있습니다. 입력 필드가 여기에 있습니다. <input #dob="ngModel" [(ngModel)]="model.dob" [ngClass]="{ 'is-invalid': f.submitted && dob.invalid }" class="form-control" id="dob" name="dob" required type="date" /> 이 문제를 어떻게 해결할 수 있습니까?
Denuka

@ 페르난도 레알-이것은 훌륭합니다. 고마워
Josh

이것은 번역 할 수 없습니다.
Aamer Shahzad

86

각도 / 공통에서 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');

이것은 어떤 이유로 든 매우 무거워 보입니다. 우리는 (변경 감지)에 같은 일을하고 우리의 응용 프로그램의 실행 시간의 75 % 취하고있다
sixtyfootersdude

7
각도 2.1.1로,이 오류가 발생 Supplied parameters do not match any signature of call target.new DatePipe()
saiy2k

6
다음과 같은 것을 사용할 수 있습니다new DatePipe('en-US');
Chad Kuehn

안녕하세요, 1 월 26 일과 같이 angular2에서 이와 동일한 형식을 원합니다.
yala ramesh

HIPrashanth, '처리되지 않은 약속 거부 : DatePipe에 대한 공급자가 없습니다!'라는 오류가 발생합니다. '.
MMR

19

간단한 사용자 지정 파이프를 사용하여이 작업을 수행 할 수 있습니다.

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

사용자 지정 파이프를 사용하면 나중에 날짜 형식을 업데이트하려는 경우 사용자 지정 파이프로 이동하여 모든 위치를 반영 할 수 있다는 이점이 있습니다.

커스텀 파이프 예제


14

어떤 이유로 든 날짜를 사용해야 할 때는 항상 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>

8
moment형식과 같은 작은 작업에는 라이브러리가 너무 큽니다!
Al-Mothafar

@ 오리 아나, 좋은 대답. 나는 이것을 이런 식으로 사용한다. item.deferredStartDate = item.deferredStartDate? moment (item.deferredStartDate) .toDate () : null; 구현과 동일합니다.
Kushan Randima

12

이 임시 솔루션을 사용하고 있습니다.

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

나는 각도 2를 처음 사용 하고이 문제를 해결하는 데 어려움을 겪고 있습니다. 자체 TS 파일 (js로 컴파일)에 추가했습니다. 앱 구성 요소에 공급자로 추가 한 다음 자식 구성 요소의 생성자에 추가하는 것을 포함하여 여러 가지를 시도했지만 얻을 수 없었습니다. 오류는; "파이프 'dateFormat'을 (를) 찾을 수 없습니다." 이것을 구현하는 방법에 대한 간단한 개요를 알려주십시오. 다음은 "종속성"을 사용하는 패키지입니다. { "angular2": "2.0.0-beta.17", "systemjs": "0.19.25", "es6-shim": "^ 0.35.0", " reflect-metadata ":"0.1.2 ","rxjs ":"5.0.0-beta.2 ","zone.js ":"0.6.10 "},
Craig B

내가 정정 할 코드를 작성해 주시겠습니까?
Deepak

@Deepakrao 여기 'pt'란 무엇입니까? 그리고 컴포넌트에서이 파이프를 어떻게 호출합니까? let date = new DateFormat (). transform (input)과 같습니다. 수정 해주세요. hh : mm, 즉 시간을 표시하려면 어떻게해야합니까
주인공

11

시간과 시간대를 찾는 사람이라면 이것이 당신을위한 것입니다

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

날짜 및 시간 형식의 끝에서 시간대에 z를 추가하십시오.

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

7

각도 : 8.2.11

<td>{{ data.DateofBirth | date }}</td>

출력 : 1973 년 6 월 9 일

<td>{{ data.DateofBirth | date: 'dd/MM/yyyy' }}</td>

산출 : 09/06/1973

<td>{{ data.DateofBirth | date: 'dd/MM/yyyy hh:mm a' }}</td>

출력 : 09/06/1973 12:00 AM


두 번째와 세 번째 예는 동일하며 다른 출력을 생성합니까?
Jp_


5

누구나 각도 6에서 AM 또는 PM으로 시간과 함께 날짜를 표시 할 수 있다면 이것은 당신을위한 것입니다.

{{date | date: 'dd/MM/yyyy hh:mm a'}}

산출

여기에 이미지 설명을 입력하십시오

미리 정의 된 형식 옵션

예는 en-US 로케일로 제공됩니다.

'short': equivalent to 'M/d/yy, h:mm a' (6/15/15, 9:03 AM).
'medium': equivalent to 'MMM d, y, h:mm:ss a' (Jun 15, 2015, 9:03:01 AM).
'long': equivalent to 'MMMM d, y, h:mm:ss a z' (June 15, 2015 at 9:03:01 AM GMT+1).
'full': equivalent to 'EEEE, MMMM d, y, h:mm:ss a zzzz' (Monday, June 15, 2015 at 9:03:01 AM GMT+01:00).
'shortDate': equivalent to 'M/d/yy' (6/15/15).
'mediumDate': equivalent to 'MMM d, y' (Jun 15, 2015).
'longDate': equivalent to 'MMMM d, y' (June 15, 2015).
'fullDate': equivalent to 'EEEE, MMMM d, y' (Monday, June 15, 2015).
'shortTime': equivalent to 'h:mm a' (9:03 AM).
'mediumTime': equivalent to 'h:mm:ss a' (9:03:01 AM).
'longTime': equivalent to 'h:mm:ss a z' (9:03:01 AM GMT+1).
'fullTime': equivalent to 'h:mm:ss a zzzz' (9:03:01 AM GMT+01:00).

참조 링크



4

MacOS 및 iOS의 Safari 브라우저 용 Typescript가있는 Angular 2에서 날짜 파이프가 올바르게 작동하지 않습니다. 나는 최근 에이 문제에 직면했다. 문제를 해결하기 위해 여기서는 순간 js를 사용해야했습니다. 내가 한 일을 간단히 언급하면 ​​...

  1. 프로젝트에 momentjs npm 패키지를 추가하십시오.

  2. xyz.component.html에서 (여기에서 startDateTime은 데이터 유형 문자열 임)

{{ convertDateToString(objectName.startDateTime) }}

  1. xyz.component.ts에서

import * as moment from 'moment';

convertDateToString(dateToBeConverted: string) {
return moment(dateToBeConverted, "YYYY-MM-DD HH:mm:ss").format("DD-MMM-YYYY");
}

1
momentjs와 함께 사용한 코드를 보여 주면 솔루션을 시도하려는 사람이 여전히 알아낼 필요가 없습니다.
Fabulous

솔루션으로 내 의견을 업데이트했습니다. 확인해주십시오.
Nikhil

3

형식과 같은 날짜 파이프에 대한 자세한 정보는 여기를 참조하십시오 .

구성 요소에서 사용하려면 간단하게 수행 할 수 있습니다

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

이제 간단히 변환 방법을 사용할 수 있습니다.

const now = Date.now();
const myFormattedDate = this.pipe.transform(now, 'short');

3

로케일 문자열을 DatePipe에 인수로 전달해야합니다.

var ddMMyyyy = this.datePipe.transform(new Date(),"dd-MM-yyyy");

사전 정의 된 형식 옵션 :

1.      'short': equivalent to 'M/d/yy, h:mm a' (6/15/15, 9:03 AM).
2.      'medium': equivalent to 'MMM d, y, h:mm:ss a' (Jun 15, 2015, 9:03:01 AM).
3.      'long': equivalent to 'MMMM d, y, h:mm:ss a z' (June 15, 2015 at 9:03:01 AM GMT+1).
4.      'full': equivalent to 'EEEE, MMMM d, y, h:mm:ss a zzzz' (Monday, June 15, 2015 at 9:03:01 AM GMT+01:00).
5.      'shortDate': equivalent to 'M/d/yy' (6/15/15).
6.      'mediumDate': equivalent to 'MMM d, y' (Jun 15, 2015).
7.      'longDate': equivalent to 'MMMM d, y' (June 15, 2015).
8.      'fullDate': equivalent to 'EEEE, MMMM d, y' (Monday, June 15, 2015).
9.      'shortTime': equivalent to 'h:mm a' (9:03 AM).
10. 'mediumTime': equivalent to 'h:mm:ss a' (9:03:01 AM).
11. 'longTime': equivalent to 'h:mm:ss a z' (9:03:01 AM GMT+1).
12. 'fullTime': equivalent to 'h:mm:ss a zzzz' (9:03:01 AM GMT+01:00).

app.component.module.ts에 날짜 파이프를 추가하십시오.

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import {DatePipe} from '@angular/common';
@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule
  ],
  providers: [
    DatePipe
  ],
  bootstrap: [AppComponent]
})
export class AppModule { }

2

이런 종류의 일에 momentjs를 사용할 수도 있습니다. Momentjs 는 JavaScript로 날짜를 구문 분석, 유효성 검사, 조작 및 표시하는 것이 가장 좋습니다.

나는이 파이프를 Urish에서 사용했는데 나에게 잘 작동합니다.

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

args 매개 변수에서 "dd / mm / yyyy"와 같은 날짜 형식을 넣을 수 있습니다.


링크가 끊어짐, 링크는 이제 github.com/urish/angular2-moment/blob/master/src/…
Tony

0

내 경우에는 구성 요소 파일에서 사용합니다.

import {formatDate} from '@angular/common';

// Use your preferred locale
import localeFr from '@angular/common/locales/fr';
import { registerLocaleData } from '@angular/common';

// ....

displayDate: string;
registerLocaleData(localeFr, 'fr');
this.displayDate = formatDate(new Date(), 'EEEE d MMMM yyyy', 'fr');

그리고 컴포넌트 HTML 파일에서

<h1> {{ displayDate }} </h1>

그것은 나를 위해 잘 작동합니다 ;-)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.