2017-02-10 4 views
0

Я наблюдаю, как кажется, странное поведение при использовании DatePipe в угловом2. По какой-то причине, после запуска даты '03// 1992' через DatePipe, он меняется на '03// 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

Таким образом, при его просмотре отображается первая строка как «Неверная дата: 03/09/1992»? – lupus137

+0

Да, точно http://imgur.com/Dn2y3lK Я думаю, что угловая датапика немного багги (по-прежнему?) По крайней мере в какой-то момент. Не нужно было работать с ним через некоторое время :) – 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:

new Date(Date.UTC(1992, 2, 9, 5, 0, 0)); 

выше гарантирует, что время, смещение 5 и стандартизированы в разных часовых поясах.

Смежные вопросы