gpt4 book ai didi

javascript - 转换原始日期值后 Angular 日期管道打印错误日期

转载 作者:太空狗 更新时间:2023-10-29 18:24:27 24 4
gpt4 key购买 nike

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

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

这是我的 View 代码的样子(我将首先列出通过日期管道传递的日期值,然后列出相同的值,但没有通过日期管道传递)对于 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" />

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

enter image description here

所以您会注意到转换后的值有一天的偏差。我可以在此处添加什么以确保在通过日期管道传递后将正确的转换值打印到屏幕上?

最佳答案

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

>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"

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

关于javascript - 转换原始日期值后 Angular 日期管道打印错误日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48155536/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com