Định dạng ngày là dd / MM / yyyy bằng ống


257

Tôi đang sử dụng dateđường ống để định dạng ngày của mình, nhưng tôi không thể có được định dạng chính xác mà tôi muốn mà không có cách giải quyết. Tôi hiểu sai về đường ống hay chỉ là không thể?

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

xem plnkr


2
Các dateđường ống có một số vấn đề hiện nay.
Günter Zöchbauer

Ứng viên phát hành này vẫn cảm thấy một chút dang dở. Đây là vấn đề thứ hai tôi vấp ngã trong 2 ngày .. hy vọng họ sẽ khắc phục sớm. Tạo các đường ống của riêng bạn cho việc này là tùy chọn, nhưng nó có cảm giác hơi giống với sự trùng lặp .. và bạn có thể xóa nó trong một vài tháng ..
Maarten Kieft



Câu trả lời:


466

Lỗi định dạng ngày ống được sửa trong Angular 2.0.0-rc.2, Yêu cầu kéo này .

Bây giờ chúng ta có thể làm theo cách thông thường:

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

Ví dụ:

Phiên bản hiện tại:

Example Angular 8.x.x


Phiên bản cũ:

Example Angular 7.x

Example Angular 6.x

Example Angular 4.x

Example Angular 2.x


Thêm thông tin trong tài liệu DatePipe


1
cảm ơn, chỉ muốn nối thêm các mẹo cho vấn đề định dạng IE11 ++, xem stackoverflow.com/questions/39728481/ từ
boly38

Trong Angular 5, điều này rõ ràng đã được giải quyết @ boly38, hãy theo dõi cập nhật trong câu trả lời. Và câu trả lời của tôi trong câu hỏi được liên kết: stackoverflow.com/a/46218711/2290538
Fernando Leal

Tôi đang nhận được ngày từ API dưới dạng dob: "2019-02-05 00:00:00". Tôi muốn xóa 00:00:00 và tôi có một mẫu điều khiển mẫu ở góc 6. Trường nhập liệu của tôi được đưa ra ở đây. <input #dob="ngModel" [(ngModel)]="model.dob" [ngClass]="{ 'is-invalid': f.submitted && dob.invalid }" class="form-control" id="dob" name="dob" required type="date" /> Làm thế nào tôi có thể sửa lỗi này ?
Denuka

@FernandoLeal - Điều này thật tuyệt vời. Cảm ơn vì điều đó.
Josh

Điều này sẽ không thể dịch được.
Aamer Shahzad

86

Nhập DatePipe từ góc / chung và sau đó sử dụng mã dưới đây:

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

nơi userdate sẽ là chuỗi ngày của bạn. Xem nếu điều này giúp.

Ghi chú chữ thường cho ngày và năm:

d- date
M- month
y-year

BIÊN TẬP

Bạn phải truyền localechuỗi dưới dạng đối số cho DatePipe, ở góc mới nhất. Tôi đã thử nghiệm ở góc 4.x

Ví dụ:

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

Điều này, vì một số lý do dường như rất nặng nề. Chúng tôi đang làm điều tương tự (phát hiện thay đổi) và nó đang chiếm 75% thời gian thực hiện ứng dụng của chúng tôi
Sixty feetersdude

7
Với Angular 2.1.1, lỗi này được đưa Supplied parameters do not match any signature of call target.vàonew DatePipe()
saiy2k

6
Bạn có thể sử dụng một cái gì đó nhưnew DatePipe('en-US');
Chad Kuehn

Xin chào, tôi muốn định dạng tương tự trong angular2 như ngày 26 tháng 1, (tôi không muốn năm) như thế nào?
yala ramesh

HIPrashanth, tôi đang nhận được lỗi 'Từ chối lời hứa chưa được giải quyết: Không có nhà cung cấp nào cho DatePipe! '.
MMR

19

Bạn có thể đạt được điều này bằng cách sử dụng một đường ống tùy chỉnh đơn giản.

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

Ưu điểm của việc sử dụng một đường ống tùy chỉnh là, nếu bạn muốn cập nhật định dạng ngày trong tương lai, bạn có thể đi và cập nhật đường ống tùy chỉnh của mình và nó sẽ phản ánh mọi nơi.

Ví dụ ống tùy chỉnh


14

Tôi luôn sử dụng Moment.js khi tôi cần sử dụng ngày vì bất kỳ lý do gì.

Thử cái này:

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

   }
}

Và theo quan điểm:

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

8
momentthư viện quá lớn cho một công việc nhỏ như định dạng!
Al-Mothafar

@Oriana, Câu trả lời hay. Tôi sử dụng nó theo cách này; item.deferredStartDate = item.deferredStartDate? khoảnh khắc (item.deferredStartDate) .toDate (): null; Nó là khá giống như thực hiện của bạn.
Kushan Randima

12

Tôi đang sử dụng Giải pháp tạm thời này:

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

Tôi mới làm quen với góc 2 và đang gặp khó khăn trong việc này. Tôi đã thêm nó vào tệp TS của chính nó (được biên dịch thành js). Tôi đã thử một số thứ, bao gồm thêm nó như một nhà cung cấp trên thành phần ứng dụng, sau đó trong hàm tạo của thành phần con tôi nhưng tôi không thể làm được. Lỗi là; "Không thể tìm thấy đường ống 'dateFormat". Bạn có thể cho tôi một cái nhìn tổng quan nhanh về cách thực hiện điều này xin vui lòng. Đây là các gói tôi đang sử dụng "phụ thuộc": {"angular2": "2.0.0-beta.17", "systemjs": "0.19.25", "es6-shim": "^ 0.35.0", " phản ánh siêu dữ liệu ":" 0.1.2 "," rxjs ":" 5.0.0-beta.2 "," zone.js ":" 0.6.10 "},
Craig B

Bạn có thể vui lòng plunker bạn mã tôi sẽ thực hiện chỉnh sửa. Vui lòng sử dụng phiên bản mới nhất của angular2
Deepak

@Deepakrao 'pt' ở đây là gì? Và làm thế nào để tôi gọi đường ống này trong thành phần của tôi? như let date = new DateFormat (). Transform (đầu vào); Xin hãy sửa cho tôi. Và nếu tôi muốn hiển thị hh: mm, tức là thời gian
Nhân vật chính

11

Nếu bất cứ ai tìm kiếm với thời gian và múi giờ, đây là dành cho bạn

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

thêm z cho múi giờ ở cuối ngày và định dạng thời gian

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

7

Góc: 8.2.11

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

Đầu ra: ngày 9 tháng 6 năm 1973

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

Đầu ra: 09/06/1973

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

Đầu ra: 09/06/1973 12:00 AM


Ví dụ thứ hai và thứ ba giống nhau và tạo ra đầu ra khác nhau?
Jp_

5

Điều duy nhất làm việc cho tôi được lấy cảm hứng từ đây: https://stackoverflow.com/a/35527407/2310544

Đối với dd / MM / yyyy thuần túy, điều này hiệu quả với tôi, với góc 2 beta 16:

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

Đây là một bản hack khá dễ đọc cho các phiên bản beta, không biết tại sao nó bị hạ cấp nhưng tôi sẽ đưa nó về 0;)
Sam Vloeberghs

5

Nếu bất cứ ai cũng có thể tìm cách hiển thị ngày theo thời gian trong AM hoặc PM ở góc 6 thì đây là dành cho bạn.

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

Đầu ra

nhập mô tả hình ảnh ở đây

Tùy chọn định dạng được xác định trước

Ví dụ được đưa ra tại địa phương 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).

liên kết tham khảo



4

Các ống ngày không hoạt động chính xác trong Angular 2 với trình duyệt Typecript cho Safari trên MacOS và iOS. Tôi phải đối mặt với vấn đề này gần đây. Tôi đã phải sử dụng khoảnh khắc js ở đây để giải quyết vấn đề. Đề cập đến những gì tôi đã làm trong thời gian ngắn ...

  1. Thêm gói nj giâyjs trong dự án của bạn.

  2. Trong xyz.component.html, (Lưu ý ở đây rằng startDateTime là chuỗi kiểu dữ liệu)

{{ convertDateToString(objectName.startDateTime) }}

  1. Theo 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
Sẽ hữu ích nếu bạn hiển thị mã mà bạn đã sử dụng với khoảnh khắc để bất kỳ ai muốn thử giải pháp đó sẽ không phải tìm ra nó.
Tuyệt vời

Cập nhật bình luận của tôi với giải pháp. Hãy kiểm tra.
Nikhil

3

Bạn có thể tìm thêm thông tin về đường ống ngày ở đây , chẳng hạn như các định dạng.

Nếu bạn muốn sử dụng nó trong thành phần của mình, bạn chỉ cần làm

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

Bây giờ, bạn có thể chỉ cần sử dụng phương thức biến đổi của nó, sẽ là

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

3

Bạn phải truyền chuỗi miền địa phương làm đối số cho DatePipe.

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

Tùy chọn định dạng được xác định trước:

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

thêm datepipe trong 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

Bạn cũng có thể sử dụng khoảnh khắc cho những thứ này. Momentjs là tốt nhất để phân tích, xác thực, thao tác và hiển thị ngày trong JavaScript.

Tôi đã sử dụng đường ống này từ Urish, hoạt động tốt với tôi:

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

Trong tham số args, bạn có thể đặt định dạng ngày của mình như: "dd / mm / yyyy"


liên kết bị hỏng, liên kết hiện là github.com/urish/angular2-moment/blob/master/src/ mẹo
Tony

0

Trong trường hợp của tôi, tôi sử dụng trong tập tin thành phần:

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

Và trong tệp HTML thành phần

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

Việc này ổn với tôi ;-)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.