转换原始日期值后角度日期管道打印错误日期

Mui*_*rik 7 javascript typescript date-pipe angular

我在我的 Angular 2 应用程序中使用 Angular 的日期管道,以便以更人性化的格式格式化日期。我能够从 API 中提取日期,并成功编辑这些日期并将其保存到 API。但是,我遇到了一个问题,即日期管道错误地转换了日期 - 就实际显示的内容而言。

澄清一下,如果我将原始日期打印到屏幕上,那是正确的。当我编辑通过日期管道传递的值时,会保存正确的日期。但是,在我进行编辑后,转换后的日期值再次更改(不是根据保存的内容,仅根据视图中显示的内容)--最终会稍微偏离,通常是一天左右. 因此,如果我将值编辑为 09/25/2010,它将被保存到数据库中,但视图中显示的是 09/24/2010。所以看起来时区的某种默认设置可能会导致问题?

这是我的视图代码的外观(我将首先列出通过日期管道传递的日期值,然后列出相同的值,但未通过日期管道传递)用于 dob - 出生日期:

<!-- DATE PASSED THROUGH DATE PIPE -->
    <input class="app-input" [ngModel]="member.dob | date:'MM/dd/yyyy'"
        (ngModelChange)="member.dob=$event" name="inputField" type="text" /> 

<!-- RAW VALUE PRINTED TO SCREEN -->
    <input class="app-input" [ngModel]="member.dob" 
        (ngModelChange)="member.dob=$event" name="inputField" type="text" />
Run Code Online (Sandbox Code Playgroud)

这就是上面代码最终打印到屏幕上的内容:

在此处输入图片说明

因此,您会注意到转换后的值减少了一天。我可以在此处添加什么以确保在通过日期管道后将正确的转换值打印到屏幕上?

Vip*_*yal 3

问题不在于管道,而在于将其转换为字符串时。这是因为您所在的时区。我使用以下方法来获取正确的值:

>d = new Date();
Tue Jan 09 2018 00:08:38 GMT+0530 (India Standard Time)
>d.toISOString()
"2018-01-08T18:38:38.752Z"
>d.setMinutes(d.getMinutes() - d.getTimezoneOffset());
1515456518752
>d
Tue Jan 09 2018 05:38:38 GMT+0530 (India Standard Time)
>d.toISOString()
"2018-01-09T00:08:38.752Z"
Run Code Online (Sandbox Code Playgroud)

将日期转换为d.setMinutes(d.getMinutes() - d.getTimezoneOffset())