使用管道将日期格式化为 dd/MM/yyyy
Format date as dd/MM/yyyy using pipes
我正在使用 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();
}
}
我认为这是因为语言环境被硬编码到 DatePipe
中。看到这个 link:
现在无法通过配置更新此语言环境。
我正在使用这个临时解决方案:
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');
}
}
}
唯一对我有用的是从这里得到的启发:
对于纯 dd/MM/yyyy,这对我有用,angular 2 beta 16:
{{ myDate | date:'d'}}/{{ myDate | date:'MM'}}/{{ myDate | date:'y'}}
从 angular/common 导入 DatePipe,然后使用以下代码:
var datePipe = new DatePipe();
this.setDob = datePipe.transform(userdate, 'dd/MM/yyyy');
在哪里
用户日期
将是您的日期字符串。
看看这是否有帮助。
记下日期和年份的小写字母:
d - date
M - month
y - year
编辑
在最新的 angular 中,您必须将 locale
字符串作为参数传递给 DatePipe。我在 angular 4.x
测试过
例如:
var datePipe = new DatePipe('en-US');
管道日期格式错误已在 Angular 2.0.0-rc.2、this Pull Request.
中修复
现在我们可以按照常规方式进行:
{{valueDate | date: 'dd/MM/yyyy'}}
示例:
当前版本:
旧版本:
你也可以使用 momentjs 来做这类事情。 Momentjs 最擅长解析、验证、操作和显示 JavaScript 中的日期。
我用的是 Urish 的这个烟斗,对我来说效果很好:
https://github.com/urish/angular2-moment/blob/master/src/DateFormatPipe.ts
在 args 参数中,您可以将日期格式设置为:"dd/mm/yyyy"
更新:
鉴于 Moment.js 已被弃用,此答案不再有效。目前,当我必须格式化某个日期时,根据任务,我使用 Javascript 日期或 date-fns
是 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')
}
}
并且在视图中:
{{ 日期 |格式日期}}
您可以通过简单的自定义管道实现此目的。
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 }}
使用自定义管道的好处是,如果你想在以后更新日期格式,你可以去更新你的自定义管道,它会反映到每个地方。
日期管道在 Angular 2 和 MacOS 上的 Safari 浏览器的 Typescript 和 iOS 中无法正常运行。我最近遇到了这个问题。我不得不在这里使用 moment js 来解决这个问题。简而言之提及我所做的...
在你的项目中添加 momentjs npm 包。
xyz.component.html下,(这里注意startDateTime是string数据类型)
{{ convertDateToString(objectName.startDateTime) }}
- 在xyz.component.ts下,
import * as moment from 'moment';
convertDateToString(dateToBeConverted: string) {
return moment(dateToBeConverted, "YYYY-MM-DD HH:mm:ss").format("DD-MMM-YYYY");
}
如果有人看时间和时区,这是给你的
{{data.ct | date :'dd-MMM-yy h:mm:ss a '}}
在日期和时间格式的末尾添加 z 作为时区
{{data.ct | date :'dd-MMM-yy h:mm:ss a z'}}
您可以找到有关日期管道 here 的更多信息,例如格式。
如果你想在你的组件中使用它,你可以简单地做
pipe = new DatePipe('en-US'); // Use your own locale
现在,您可以简单地使用它的转换方法,这将是
const now = Date.now();
const myFormattedDate = this.pipe.transform(now, 'short');
如果有人想在 angular 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).
在我的例子中,我在组件文件中使用:
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>
它对我来说很好用 ;-)
Angular: 8.2.11
<td>{{ data.DateofBirth | date }}</td>
输出:1973 年 6 月 9 日
<td>{{ data.DateofBirth | date: 'dd/MM/yyyy' }}</td>
输出: 09/06/1973
<td>{{ data.DateofBirth | date: 'dd/MM/yyyy hh:mm a' }}</td>
输出: 09/06/1973 12:00 AM
您必须将语言环境字符串作为参数传递给 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
中添加日期管道
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 { }
我正在使用 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();
}
}
我认为这是因为语言环境被硬编码到 DatePipe
中。看到这个 link:
现在无法通过配置更新此语言环境。
我正在使用这个临时解决方案:
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');
}
}
}
唯一对我有用的是从这里得到的启发:
对于纯 dd/MM/yyyy,这对我有用,angular 2 beta 16:
{{ myDate | date:'d'}}/{{ myDate | date:'MM'}}/{{ myDate | date:'y'}}
从 angular/common 导入 DatePipe,然后使用以下代码:
var datePipe = new DatePipe();
this.setDob = datePipe.transform(userdate, 'dd/MM/yyyy');
在哪里 用户日期 将是您的日期字符串。 看看这是否有帮助。
记下日期和年份的小写字母:
d - date
M - month
y - year
编辑
在最新的 angular 中,您必须将 locale
字符串作为参数传递给 DatePipe。我在 angular 4.x
例如:
var datePipe = new DatePipe('en-US');
管道日期格式错误已在 Angular 2.0.0-rc.2、this Pull Request.
中修复现在我们可以按照常规方式进行:
{{valueDate | date: 'dd/MM/yyyy'}}
示例:
当前版本:
旧版本:
你也可以使用 momentjs 来做这类事情。 Momentjs 最擅长解析、验证、操作和显示 JavaScript 中的日期。
我用的是 Urish 的这个烟斗,对我来说效果很好:
https://github.com/urish/angular2-moment/blob/master/src/DateFormatPipe.ts
在 args 参数中,您可以将日期格式设置为:"dd/mm/yyyy"
更新:
鉴于 Moment.js 已被弃用,此答案不再有效。目前,当我必须格式化某个日期时,根据任务,我使用 Javascript 日期或 date-fns
是 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')
}
}
并且在视图中:
{{ 日期 |格式日期}}
您可以通过简单的自定义管道实现此目的。
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 }}
使用自定义管道的好处是,如果你想在以后更新日期格式,你可以去更新你的自定义管道,它会反映到每个地方。
日期管道在 Angular 2 和 MacOS 上的 Safari 浏览器的 Typescript 和 iOS 中无法正常运行。我最近遇到了这个问题。我不得不在这里使用 moment js 来解决这个问题。简而言之提及我所做的...
在你的项目中添加 momentjs npm 包。
xyz.component.html下,(这里注意startDateTime是string数据类型)
{{ convertDateToString(objectName.startDateTime) }}
- 在xyz.component.ts下,
import * as moment from 'moment';
convertDateToString(dateToBeConverted: string) {
return moment(dateToBeConverted, "YYYY-MM-DD HH:mm:ss").format("DD-MMM-YYYY");
}
如果有人看时间和时区,这是给你的
{{data.ct | date :'dd-MMM-yy h:mm:ss a '}}
在日期和时间格式的末尾添加 z 作为时区
{{data.ct | date :'dd-MMM-yy h:mm:ss a z'}}
您可以找到有关日期管道 here 的更多信息,例如格式。
如果你想在你的组件中使用它,你可以简单地做
pipe = new DatePipe('en-US'); // Use your own locale
现在,您可以简单地使用它的转换方法,这将是
const now = Date.now();
const myFormattedDate = this.pipe.transform(now, 'short');
如果有人想在 angular 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).
在我的例子中,我在组件文件中使用:
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>
它对我来说很好用 ;-)
Angular: 8.2.11
<td>{{ data.DateofBirth | date }}</td>
输出:1973 年 6 月 9 日
<td>{{ data.DateofBirth | date: 'dd/MM/yyyy' }}</td>
输出: 09/06/1973
<td>{{ data.DateofBirth | date: 'dd/MM/yyyy hh:mm a' }}</td>
输出: 09/06/1973 12:00 AM
您必须将语言环境字符串作为参数传递给 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
中添加日期管道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 { }