Boruları kullanarak tarihi gg / aa / yyyy olarak biçimlendir


257

dateTarihimi biçimlendirmek için boruyu kullanıyorum , ancak geçici bir çözüm olmadan istediğim biçimi tam olarak alamıyorum. Boruları yanlış mı anlıyorum yoksa mümkün değil mi?

//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 görünümü


2
dateBoru halen bazı sorunlar vardır.
Günter Zöchbauer

Bu sürüm adayı hala biraz bitmemiş hissediyor. Bu 2 gün içinde tökezledi ikinci sorun .. umarım yakında düzeltir. Bunun için kendi borularınızı oluşturmak bir seçenektir, ancak çoğaltma gibi hissedersiniz .. ve birkaç ay içinde kaldırabilirsiniz ..
Maarten Kieft



Yanıtlar:


467

Boru tarihi biçimi hatası Açısal 2.0.0-rc.2'de düzeltildi, bu Çekme İsteği .

Şimdi geleneksel yolu yapabiliriz:

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

Örnekler:

Şimdiki versiyonu:

Example Angular 8.x.x


Eski versiyonlar:

Example Angular 7.x

Example Angular 6.x

Example Angular 4.x

Example Angular 2.x


Dokümanlarda daha fazla bilgi DatePipe


1
teşekkürler, sadece IE11 ++ formatı sorunu için ek ipuçları eklemek istiyorum, cf. stackoverflow.com/questions/39728481/…
boly38

Angular 5'te bu görünüşe göre @ boly38 çözüldü, cevaptaki güncellemeyi takip et. Ve soruya verdiğim cevap bağlantılı: stackoverflow.com/a/46218711/2290538
Fernando Leal

API'dan dob olarak tarih alıyorum: "2019-02-05 00:00:00". 00:00:00 'ı kaldırmak istiyorum ve açısal 6'da şablon odaklı bir formum var. Giriş alanım burada verilmiştir. <input #dob="ngModel" [(ngModel)]="model.dob" [ngClass]="{ 'is-invalid': f.submitted && dob.invalid }" class="form-control" id="dob" name="dob" required type="date" /> bunu nasıl düzeltebilirim?
Denuka

@FernandoLeal - Bu inanılmaz. Bunun için teşekkürler.
Josh

bu tercüme edilemez.
Aamer Shahzad

86

DatePipe'ı açısal / ortaktan içe aktarın ve ardından aşağıdaki kodu kullanın:

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

burada kullanıcı tarihi sizin tarih dizeniz olacaktır. Bunun yardımcı olup olmadığını görün.

Tarih ve yıl için küçük harfleri not edin:

d- date
M- month
y-year

DÜZENLE

Sen geçmek zorunda localeson açısal içinde DatePipe bir argüman olarak dize. Açısal 4.x'te test yaptım

Örneğin:

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

Bu, bazı nedenlerden dolayı çok ağır görünüyor. Aynı şeyi yapıyoruz (değişiklik tespiti üzerine) ve uygulamamızın yürütme süresinin% 75'ini alıyor
sixtyfootersdude

7
Köşeli 2.1.1 ile bu hata atılır Supplied parameters do not match any signature of call target.üzerinenew DatePipe()
saiy2k

6
new DatePipe('en-US');
Şöyle bir

Merhaba, ben 26 Ocak gibi açısal2 aynı biçimi istiyorum, (yıl istemiyorum) nasıl?
yala ramesh

HIPrashanth, 'İşlenmemiş Promise reddi: DatePipe için sağlayıcı yok! '.
MMR

19

Bunu basit bir özel boru ile yapabilirsiniz.

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

Özel bir pipo kullanmanın avantajı, gelecekte tarih biçimini güncellemek istiyorsanız, özel piponuzu gidip güncelleyebileceğiniz ve her yeri yansıtacağıdır.

Özel Boru örnekleri


14

Herhangi bir nedenle tarihleri ​​kullanmam gerektiğinde her zaman Moment.js kullanıyorum.

Bunu dene:

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

   }
}

Ve bakış açısından:

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

8
momentkütüphane biçimi gibi küçük bir iş için çok büyük!
Al-Mothafar

@ Oriana, Güzel cevap. Ben bu şekilde kullanıyorum; item.deferredStartDate = item.deferredStartDate? moment (item.deferredStartDate) .toDate (): null; Uygulamanızla aynı.
Kushan Randima

12

Bu Geçici Çözümü kullanıyorum:

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

Açısal 2'de yeniyim ve bunu yaparken sorun yaşıyorum. Kendi TS dosyasına ekledim (js derlendi). Uygulama bileşenine bir sağlayıcı olarak eklemek ve daha sonra çocuğumun yapıcısına eklemek de dahil olmak üzere birkaç şey denedim, ancak devam edemedim. Hata; Msgstr "'dateFormat' borusu bulunamadı". Bana bunu nasıl uygulayacağınıza dair hızlı bir genel bakış verebilir misiniz? İşte "bağımlılıklar" kullanıyorum paketleri: {"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

Size kod plunker lütfen düzeltme yapacağım. Lütfen en son angular2 sürümünü kullanın
Deepak

@Deepakrao Burada 'pt' nedir? Ve bu boruyu bileşenimde nasıl adlandırırım? let date = new DateFormat (). transform (input) gibi; Lütfen düzelt beni. Ve ss: dd, yani zaman göstermek istersem
Kahramanı

11

Eğer zaman ve saat dilimi arayan biri varsa, bu tam size göre

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

tarih ve saat biçiminin sonunda saat dilimi için z ekle

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

7

Açısal: 8.2.11

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

Çıktı: 9 Haz 1973

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

Çıktı: 09/06/1973

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

Çıktı: 09/06/1973 00:00


İkinci ve üçüncü örnek aynıdır ve farklı çıktılar üretir mi?
Jp_

5

Benim için işe yarayan tek şey buradan ilham aldı: https://stackoverflow.com/a/35527407/2310544

Saf gg / aa / yyyy için, bu benim için çalıştı, açısal 2 beta 16 ile:

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

Bu beta sürümleri için oldukça okunabilir bir hack, neden indirildi bilmiyorum ama sıfıra geri getireceğim;)
Sam Vloeberghs

5

Eğer herkes açısal 6'da tarihi AM veya PM olarak tarihle görüntüleyebilirse, bu tam size göre.

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

Çıktı

resim açıklamasını buraya girin

Önceden tanımlanmış format seçenekleri

Örnekler en-US yerel ayarında verilmiştir.

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

Referans Bağlantısı



4

Tarih boruları, MacOS ve iOS'ta Safari tarayıcı için Typescript ile Açısal 2'de düzgün davranmaz. Son zamanlarda bu sorunla karşılaştım. Burada sorunu çözmek için an js kullanmak zorunda kaldı. Kısaca yaptığımdan bahsetmişken ...

  1. Projenize momentjs npm paketini ekleyin.

  2. Xyz.component.html altında (Burada startDateTime öğesinin veri türü dizesi olduğunu unutmayın)

{{ convertDateToString(objectName.startDateTime) }}

  1. Xyz.component.ts altında,

import * as moment from 'moment';

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

1
Momentjs ile kullandığınız kodu gösterdiyseniz, bu çözümü denemek isteyen herkesin hala çözmesi gerekmez.
Muhteşem

Yorumum çözüm ile güncellendi. Lütfen kontrol edin.
Nikhil

3

Tarih borusu hakkında formatlar gibi daha fazla bilgiyi burada bulabilirsiniz .

Bileşeninizde kullanmak istiyorsanız,

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

Şimdi, sadece dönüştürme yöntemini kullanabilirsiniz.

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

3

Yerel ayar dizesini bağımsız değişken olarak DatePipe öğesine iletmeniz gerekir.

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

Önceden tanımlanmış format seçenekleri:

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 içine datepipe ekle

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

Ayrıca momentjs'i bu tür şeyler için de kullanabilirsiniz. Momentjs , JavaScript'te tarihleri ​​ayrıştırmak, doğrulamak, değiştirmek ve görüntülemek için en iyisidir.

Bu boruyu benim için iyi çalışan Urish'ten kullandım:

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

Args parametresinde tarih biçiminizi şu şekilde koyabilirsiniz: "gg / aa / yyyy"


bağlantı koptu, bağlantı şimdi github.com/urish/angular2-moment/blob/master/src/…
Tony

0

Benim durumumda, bileşen dosyasında kullanıyorum:

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

Ve bileşen HTML dosyasında

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

Benim için iyi çalışıyor ;-)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.