パイプを使用して日付を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パイプにはいくつかの問題があります。
ギュンターZöchbauer

このリリース候補はまだ少し未完成だと感じています。これは私が2日間でつまずいた2番目の問題です。うまくいけば、すぐに修正されるでしょう。このため、独自のパイプを作成することはオプションですが、それは少し重複のように感じている...あなたは数ヶ月でそれを削除することができます。..
マールテンKieft



回答:


466

Angular 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

Angular 5では、これは明らかに@ boly38で解決されました。回答の更新に従ってください。そして質問の私の回答はリンクされています:stackoverflow.com/a/46218711/2290538
Fernando Leal

APIからdob: "2019-02-05 00:00:00"として日付を取得しています。00:00:00を削除したいのですが、テンプレートドリブンフォームがAngular 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

@FernandoLeal-これは素晴らしいです。これをありがとう。
Josh

これは翻訳できません。
Aamer Shahzad

86

angular / commonからDatePipeをインポートしてから、以下のコードを使用してください:

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

ここで、 userdate は日付文字列です。これが役立つかどうかを確認します。

日付と年の小文字を書き留めます。

d- date
M- month
y-year

編集

locale最新の角度で、文字列を引数としてDatePipe に渡す必要があります。私はangular 4.xでテストしました

例えば:

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

これは、何らかの理由で非常に重いようです。私たちは同じことを行っており(変更検出時)、アプリの実行時間の75%を占めています
sixtyfootersdude

7
Angular 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 2017年

HIPrashanth、「Unhandled Promise rejection:No provider for DatePipe!'。
MMR 2017年

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 2017

@Oriana、いい答え。私はこのように使用しています。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');
        }
    }
}

私はangular 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 "}、
クレイグB

私が訂正するコードをプランカーに入れてください。angular2の最新バージョンを使用してください
Deepak

@Deepakraoここで「pt」とは何ですか?そして、どのようにコンポーネントでこのパイプを呼び出すのですか?let date = new DateFormat()。transform(input);のように 訂正してください。そして、私はHHを表示したい場合:ミリメートル、すなわち時間
主人公

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>

出力: 1973/09/06

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

出力: 1973/09/06 12:00 AM


2番目と3番目の例は同じであり、異なる出力を生成しますか?
Jp_

5

私のために働いた唯一のものはここからインスピレーションを得ました:https//stackoverflow.com/a/35527407/2310544

純粋なdd / MM / yyyyの場合、これは私にとってはうまくいきました、angular 2 beta 16:

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

これはベータ版ではかなり読みやすいハックです。なぜそれが反対投票されたのかはわかりませんが、ゼロに戻します;)
Sam Vloeberghs

5

日付をAMまたはPMで時刻付きで角度6で表示したい場合は、これが適しています。

{{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はデータ型stringであることに注意)

{{ 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で使用したコードを表示して、そのソリューションを試してみたい人が誰でもそれを理解する必要がないようにすると、役に立ちます。
2018

ソリューションで私のコメントを更新しました。チェックしてください。
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にdatepipeを追加します

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」のような日付形式を指定できます。



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.