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


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



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


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

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


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>

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

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

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


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

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



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

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

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

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"



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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.