Format tanggal sebagai dd / MM / tttt menggunakan pipa

257

Saya menggunakan datepipa untuk memformat tanggal saya, tetapi saya tidak bisa mendapatkan format yang tepat yang saya inginkan tanpa penyelesaian. Apakah saya salah memahami pipa atau tidak mungkin?

//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();
  }
}

lihat plnkr

Jp_
sumber
2
The datepipa memiliki beberapa masalah saat.
Günter Zöchbauer
Kandidat rilis ini masih merasa sedikit belum selesai. Ini adalah masalah kedua yang saya temukan dalam 2 hari .. semoga mereka akan segera memperbaikinya. Membuat pipa sendiri untuk ini adalah opsi, tetapi rasanya agak seperti duplikasi .. dan Anda dapat menghapusnya dalam beberapa bulan ..
Maarten Kieft
Kemungkinan duplikat dari Cara mengatur lokal di DatePipe di Angular2?
nsbm
format: angular.io/api/common/DatePipe
robert king

Jawaban:

466

Bug format tanggal pipa diperbaiki di Angular 2.0.0-rc.2, Permintaan Tarik ini .

Sekarang kita bisa melakukan cara konvensional:

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

Contoh:

Versi sekarang:

Example Angular 8.x.x


Versi lama:

Example Angular 7.x

Example Angular 6.x

Example Angular 4.x

Example Angular 2.x


Info lebih lanjut dalam dokumentasi DatePipe

Fernando Leal
sumber
1
terima kasih, hanya ingin menambahkan kiat tambahan untuk masalah format IE11 ++, lih. stackoverflow.com/questions/39728481/…
boly38
Di Angular 5 ini rupanya dipecahkan @ boly38, ikuti pembaruan sebagai jawaban. Dan jawaban saya dalam pertanyaan terkait: stackoverflow.com/a/46218711/2290538
Fernando Leal
Saya mendapatkan tanggal dari API sebagai dob: "2019-02-05 00:00:00". Saya ingin menghapus 00:00:00 dan saya memiliki formulir yang didorong template di sudut 6. Bidang input saya diberikan di sini. <input #dob="ngModel" [(ngModel)]="model.dob" [ngClass]="{ 'is-invalid': f.submitted && dob.invalid }" class="form-control" id="dob" name="dob" required type="date" /> bagaimana saya bisa memperbaikinya?
Denuka
@FernandoLeal - Ini luar biasa. Terima kasih untuk ini.
Josh
ini tidak akan bisa diterjemahkan.
Aamer Shahzad
86

Impor DatePipe dari sudut / umum dan kemudian gunakan kode di bawah ini:

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

di mana userdate akan menjadi string tanggal Anda. Lihat apakah ini membantu.

Catat huruf kecil untuk tanggal dan tahun:

d- date
M- month
y-year

EDIT

Anda harus meneruskan localestring sebagai argumen ke DatePipe, dalam sudut terbaru. Saya telah menguji dalam sudut 4.x

Sebagai contoh:

var datePipe = new DatePipe('en-US');
Prashanth
sumber
Ini, untuk beberapa alasan tampaknya sangat berat. Kami melakukan hal yang sama (pada deteksi perubahan) dan itu mengambil 75% dari waktu eksekusi aplikasi kami
sixtyfootersdude
7
Dengan Angular 2.1.1, kesalahan ini dilempar Supplied parameters do not match any signature of call target.kenew DatePipe()
saiy2k
6
Anda dapat menggunakan sesuatu sepertinew DatePipe('en-US');
Chad Kuehn
Hai, saya ingin format yang sama dalam angular2 seperti 26 Januari, (saya tidak ingin tahun) bagaimana?
yala ramesh
HIPrashanth, saya mendapatkan kesalahan 'Penolakan Janji Tidak Tertangani: Tidak ada penyedia untuk DatePipe! '
MMR
19

Anda dapat mencapai ini dengan menggunakan pipa kustom sederhana.

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

Keuntungan menggunakan pipa kustom adalah bahwa, jika Anda ingin memperbarui format tanggal di masa depan, Anda dapat pergi dan memperbarui pipa kustom Anda dan itu akan mencerminkan di mana-mana.

Contoh Pipa kustom

Prashobh
sumber
14

Saya selalu menggunakan Moment.js ketika saya harus menggunakan tanggal dengan alasan apa pun.

Coba ini:

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

   }
}

Dan dalam tampilan:

<p>{{ date | formatDate }}</p>
Oriana Ruiz
sumber
8
momentperpustakaan terlalu besar untuk pekerjaan kecil seperti format!
Al-Mothafar
@Oriana, Jawaban yang bagus. Saya menggunakannya dengan cara ini; item.deferredStartDate = item.deferredStartDate? moment (item.deferredStartDate) .toDate (): null; Ini sama seperti implementasi Anda.
Kushan Randima
12

Saya menggunakan Solusi Sementara ini:

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');
        }
    }
}
Deepak
sumber
Saya baru di angular 2 dan mengalami kesulitan menjalankan ini. Saya menambahkannya di file TS sendiri (dikompilasi ke js). Saya mencoba beberapa hal termasuk menambahkannya sebagai penyedia pada komponen aplikasi kemudian di konstruktor anak saya tetapi saya tidak bisa melakukannya. Kesalahan adalah; "Pipa 'dateFormat' tidak dapat ditemukan". Bisakah Anda memberi saya gambaran singkat tentang bagaimana menerapkan ini? Inilah paket yang saya gunakan "dependensi": {"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
Tolong tolong kode Anda, saya akan melakukan koreksi. Silakan gunakan versi terbaru angular2
Deepak
@Deepakrao Apa 'pt' di sini? Dan bagaimana saya memanggil pipa ini di komponen saya? like let date = new DateFormat (). transform (input); Tolong perbaiki saya. Dan bagaimana jika saya ingin menampilkan jj: mm, yaitu waktu
Protagonis
11

Jika ada yang mencari dengan waktu dan zona waktu, ini untuk Anda

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

tambahkan z untuk zona waktu pada format tanggal dan waktu akhir

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

Sudut: 8.2.11

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

Keluaran: 9 Juni 1973

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

Output: 09/06/1973

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

Output: 09/06/1973 12:00 pagi

RM Shahidul Islam Shahed
sumber
Contoh kedua dan ketiga adalah sama dan menghasilkan keluaran yang berbeda?
Jp_
5

Satu-satunya hal yang berhasil bagi saya terinspirasi dari sini: https://stackoverflow.com/a/35527407/2310544

Untuk murni hh / MM / tttt, ini bekerja untuk saya, dengan angular 2 beta 16:

{{ myDate | date:'d'}}/{{ myDate | date:'MM'}}/{{ myDate | date:'y'}}
Johan Chouquet
sumber
ini adalah retasan yang dapat dibaca untuk versi beta, tidak tahu mengapa itu downvoted tapi saya akan mengembalikannya ke nol;)
Sam Vloeberghs
5

Jika ada yang bisa menampilkan tanggal dengan waktu di AM atau PM di sudut 6 maka ini untuk Anda.

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

Keluaran

masukkan deskripsi gambar di sini

Opsi format yang ditentukan sebelumnya

Contoh diberikan di lokal en-AS.

'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).

Tautan Referensi

Ahmer Ali Ahsan
sumber
4

Pipa tanggal tidak berperilaku dengan benar di Angular 2 dengan Typcript untuk browser Safari di MacOS dan iOS. Saya menghadapi masalah ini baru-baru ini. Saya harus menggunakan momen js di sini untuk menyelesaikan masalah. Menyebutkan apa yang telah saya lakukan singkatnya ...

  1. Tambahkan paket npm momentjs di proyek Anda.

  2. Di bawah xyz.component.html, (Perhatikan di sini bahwa startDateTime adalah string tipe data)

{{ convertDateToString(objectName.startDateTime) }}

  1. Di bawah xyz.component.ts,

import * as moment from 'moment';

convertDateToString(dateToBeConverted: string) {
return moment(dateToBeConverted, "YYYY-MM-DD HH:mm:ss").format("DD-MMM-YYYY");
}
Nikhil
sumber
1
Ini akan membantu jika Anda menunjukkan kode yang Anda gunakan dengan momentjs sehingga siapa pun yang ingin mencoba solusi itu tidak harus tetap mencari tahu.
Luar Biasa
Memperbarui komentar saya dengan solusi. Silakan periksa.
Nikhil
3

Anda dapat menemukan informasi lebih lanjut tentang pipa tanggal di sini , seperti format.

Jika Anda ingin menggunakannya dalam komponen Anda, Anda bisa melakukannya

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

Sekarang, Anda cukup menggunakan metode transformasi, yang akan menjadi

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

Anda harus meneruskan string lokal sebagai argumen ke DatePipe.

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

Opsi format yang ditentukan sebelumnya:

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).

tambahkan datepipe di 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 { }
Tienanhvn
sumber
2

Anda juga dapat menggunakan momentjs untuk hal-hal semacam ini. Momentjs paling baik mengurai, memvalidasi, memanipulasi, dan menampilkan tanggal dalam JavaScript.

Saya menggunakan pipa ini dari Urish, yang berfungsi dengan baik untuk saya:

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

Dalam parameter args Anda dapat meletakkan format tanggal Anda seperti: "dd / mm / yyyy"

Doek
sumber
tautan rusak, tautan sekarang github.com/urish/angular2-moment/blob/master/src/…
Tony
0

Dalam kasus saya, saya menggunakan file komponen:

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

Dan dalam file HTML komponen

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

Ini berfungsi dengan baik untuk saya ;-)

Sébastien REMY
sumber