How can I deal with the timezone issue with the Angular 4 date pipe?
我在每个对象中都有一个日期值,可以像这样打印:
1 | <td> {{competition.compStart }}</td> |
这是它的外观:
1 | 1931-05-31T00:00:00.000+0000 |
为了更改格式以使其更具可读性,我使用了Angular日期管道:
1 | <td> {{competition.compStart | date :"dd/MM/yyyy"}}</td> |
结果如下:
1 | 30/05/1931 |
如您所见,它将显示前一天(5月30日而不是5月31日)。
据我了解,问题与时区有关,因为我在阿根廷,而且我们有GMT-3,那么31日的00:00减去3小时将是5月30日晚上9点。
因此,如何才能使它真正地花费时间,而不是根据时区进行处理,而仍然在管道中应用格式?
在后台,
您可以使用
这实际上是
这是github上的问题:https://github.com/angular/angular/issues/9324
对于更高级的日期操作,我建议使用
编辑:已添加:
代码:https://github.com/angular/angular/blob/5.0.4/packages/common/src/pipes/date_pipe.ts#L137
文件:https://angular.io/api/common/DatePipe
对于角度5以上,您可以尝试在管道中添加时区,
默认情况下,它采用用户计算机的本地时区
并且您可以在几分钟内指定它,例如GMT-2,时区:"-120"
1 | {{ competition.compStart | date: 'short' : '-120'}} |
我也面临同样的问题。
在保存数据之前,将日期格式转换为服务中使用的日期格式。例如,在我的Java中,它是'YYYY-MM-DD'。因此在保存所有数据之前使用角度格式:
生日已绑定到您的模板字段或仅显示在其中。
this.birthdate = this.datePipe.transform(birthDate,'yyyy-MM-dd');
其中birthdate不是日期对象,而是字符串日期。
现在,当您需要在UI上显示日期时,请使用:
1 2 3 4 5 6 | let dd = (new Date(data.birthDate)).getUTCDate().toString(); let mm = ((new Date(data.birthDate)).getMonth()).toString(); let yy = (new Date(data.birthDate)).getFullYear().toString(); this.birthDate = new Date(Number(yy), Number(mm), Number(dd)); |