为什么 Angular Datepicker 发送错误的日期?
Why Angular Datepicker sends wrong date?
我有日期选择器:
<input
type="text"
formControlName="startDate"
[ngClass]="{ 'has-error': form.get('startDate').invalid }"
[matDatepicker]="picker"
class="materialDatePickerInput"
placeholder="{{ 'select_date' | translate }}"
/>
<mat-datepicker-toggle
matSuffix
[for]="picker"
></mat-datepicker-toggle>
<mat-datepicker #picker></mat-datepicker>
我从日期选择器中选择了日期:01.01.2000
,但它像这样发送到服务器:
1999-12-31T20:00:00.000Z
为什么转换成错误的日期?
没有。正如评论中提到的,这是一个时区问题。让我解释一下。
您正在服务器端获取 UTC 格式的时间,这大部分是正确的。我们倾向于这样做,以便我们可以以特定格式(通常以滴答为单位)存储时间,这样我们就可以对其进行数学运算而不必担心转换。
我猜你自己的时区是UTC + 2。所以你选择一个日期,日期选择器选择你自己时区时间为00的那一天,然后在你的后端转换时间2小时不见了。
这不是另一个日期或错误的日期,它只是另一个时区。
如果您需要日期时间,那么您需要决定在您的前端和后端选择什么时区/语言环境。
我有日期选择器:
<input
type="text"
formControlName="startDate"
[ngClass]="{ 'has-error': form.get('startDate').invalid }"
[matDatepicker]="picker"
class="materialDatePickerInput"
placeholder="{{ 'select_date' | translate }}"
/>
<mat-datepicker-toggle
matSuffix
[for]="picker"
></mat-datepicker-toggle>
<mat-datepicker #picker></mat-datepicker>
我从日期选择器中选择了日期:01.01.2000
,但它像这样发送到服务器:
1999-12-31T20:00:00.000Z
为什么转换成错误的日期?
没有。正如评论中提到的,这是一个时区问题。让我解释一下。
您正在服务器端获取 UTC 格式的时间,这大部分是正确的。我们倾向于这样做,以便我们可以以特定格式(通常以滴答为单位)存储时间,这样我们就可以对其进行数学运算而不必担心转换。
我猜你自己的时区是UTC + 2。所以你选择一个日期,日期选择器选择你自己时区时间为00的那一天,然后在你的后端转换时间2小时不见了。
这不是另一个日期或错误的日期,它只是另一个时区。
如果您需要日期时间,那么您需要决定在您的前端和后端选择什么时区/语言环境。