2017-02-10 47 views
0

我正在觀察,在angular2中使用DatePipe時會出現什麼樣的奇怪行爲。出於某種原因,運行日期'03/09 /1992' 年後通過DatePipe,它被改爲'03/08 /1992' :DatePipe錯誤地更改日期

http://plnkr.co/edit/SK6Z9q8h7EqunmkqVtpt

(更新代碼:錯誤修正)

@Component({ 
    selector: 'my-app', 
    template: ` 
    <div> Invalid Date: {{ somedate | date:'MM/dd/yyyy' }}</div> 
    <div> DateObject: {{ dateType }}</div> 
    <div> DateObject With Pipe: {{ dateType | date:'MM/dd/yyyy' }}</div> 
    <br> 
    <div> Other Valid Dates </div> 
    <div>{{ afterdate | date:'MM/dd/yyyy' }}</div> 
    <div>{{ dateTypeAfter }}</div> 

    <div>{{ beforedate | date:'MM/dd/yyyy' }}</div> 
    <div>{{ dateTypeBefore }}</div> 
    `, 
}) 
export class App { 
    somedate:string; 
    afterdate: string; 
    beforedate: string; 
    dateType: Date; 
    dateTypeAfter: Date; 
    dateTypeBefore: Date; 

    constructor() { 
    this.somedate = '03/09/1992'; 
    this.afterdate = '03/09/1993'; 
    this.beforedate = '03/09/1991'; 
    this.dateType = new Date(this.somedate); 
    this.dateTypeAfter = new Date(this.afterdate); 
    this.dateTypeBefore = new Date(this.beforedate); 
    } 
} 

這不會發生1991年或1993年,如上圖所示。結果:

Invalid Date: 03/08/1992 
DateObject: Mon Mar 09 1992 00:00:00 GMT-0400 (Eastern Daylight Time) 
DateObject With Pipe: 03/08/1992 

Other Valid Dates 
03/09/1993 
Tue Mar 09 1993 00:00:00 GMT-0500 (Eastern Standard Time) 
03/09/1991 
Sat Mar 09 1991 00:00:00 GMT-0500 (Eastern Standard Time) 

任何想法爲什麼發生這種情況?還是我誤解了一些東西?

+0

Plunker爲我顯示正確的日期:D – Alex

+0

因此,當您查看它時,您會看到第一行爲:「Invalid Date:03/09/1992」? – lupus137

+0

是的,確切地說http://imgur.com/Dn2y3lK我認爲Angular Datepipe有點bug(仍然?),至少在某些時候是這樣。有一段時間沒有必要使用它:) – Alex

回答

0

問題實際上是日光節約區。

Mon Mar 09 1992 00:00:00 GMT-0400 (Eastern Daylight Time) 
Tue Mar 09 1993 00:00:00 GMT-0500 (Eastern Standard Time) 
Sat Mar 09 1991 00:00:00 GMT-0500 (Eastern Standard Time) 

請注意,GMT偏移量是不同的,它看起來像日期管道將注意到這一點。這使得日期03/09/1992實際上轉換爲03/08/1992 23:00:00 PM。

一個可能的方法現在適用於我(但有它自身的問題)是使用UTC:

​​

以上將確保時間偏移量爲5和跨時區的標準化。