【问题标题】:Angular reactive form pass wrong date角反应形式传递错误的日期
【发布时间】:2023-11-15 19:35:01
【问题描述】:

我正在使用 PrimeNg 日历模块来获取日期。我有以下代码:

 <p-calendar formControlName="valid_till" [dateFormat]="'mm/dd/yy'"></p-calendar>

现在,当我在组件中选择例如 31st July 2020 的日期时,如果我记录该值,我将得到以下信息:

Fri Jul 31 2020 00:00:00 GMT+0530 (India Standard Time)

但是当我按如下方式将此值传递给服务器时:

this.myService
    .save(this.myForm.value, this.editId);

它传递的日期为valid_till: "2020-07-30T18:30:00.000Z",这个值在数据库中保存为2020-07-30 23:59:59。但我必须将其保存为2020-07-31 23:59:59。为什么会这样?如何保存我被选中的确切日期?

我已尝试添加在另一篇文章中看到的偏移量

newDate =  new Date(date_valid_till.getTime() +date_valid_till.getTimezoneOffset() * 60000);

但这又给了我Thu Jul 30 2020 18:29:59 GMT+0530 (India Standard Time),仍然不是我想要的日期。我只需要我在日期选择器中选择的Thu Jul 31

PS : 我使用的是 MySQL 数据库,列是 DateTime 类型。

【问题讨论】:

  • 这里是时区问题。
  • 如何解决这个问题?我曾尝试添加像 newDate = new Date(date_valid_till.getTime() + date_valid_till.getTimezoneOffset() * 60000); 这样的偏移量,但它给了我 Thu Jul 30 2020 18:29:59 GMT+0530 (India Standard Time) 并且它还有一天休息
  • 利用时刻设置时区
  • 但是由于表单字段是日期选择器,如果我使用时刻设置,当我使用路径值时会显示一些错误。它应该是一个日期对象

标签: javascript angular date primeng


【解决方案1】:

使用 dataType 作为 string

<p-calendar formControlName="valid_till" dataType="string"></p-calendar>

我创建了 stackblitz,它的工作原理

https://stackblitz.com/edit/angular-z5ifcn

【讨论】:

  • 当我使用它时,我得到core.js:6228 ERROR Unexpected literal at position 2
  • 是的。你是救生员。实际上,即使在更改dataType 之后,我也在使用时刻。非常感谢!!