mnu*_*sir 6 datetime asp.net-web-api2 angular6
我正在开发一个 Web 应用程序,使用Angular 6 和 PrimeNG控件进行前端开发,使用ASP.Net Web API 和 SQL Server进行后端开发。
在我的一个表单中,有两个 PrimeNG Calender 控件用于将起始日期和结束日期保存到数据库中。提交表单后,所有表单字段都会被收集以填充对象/模型,并将该模型传递给 Web API。对象/模型是使用 Typescript 代码在 Angular 6 中填充的。下面是我的 Typescript 代码中的前端模型:
export class MyPackage {
public PackageId: number;
public PackageUid: number;
public PackageName: string;
public PackageDesc: string;
public ValidFrom: Date;
public ValidTill: Date;
public CreatedOn: Date;
}
Run Code Online (Sandbox Code Playgroud)
这是我使用 Angular 6 和 typescript 的对象初始化过程:
let pakg = new MyPackage();
pakg.PackageName = this.packageAddForm.controls["packageName"].value;
pakg.PackageDesc = this.packageAddForm.controls["packageDesc"].value;
pakg.ValidFrom = this.packageAddForm.controls["dateFrom"].value;
pakg.ValidTill = this.packageAddForm.controls["dateEnd"].value;
Run Code Online (Sandbox Code Playgroud)
现在的问题是,当模型传递到 Web API 时,起始日期和结束日期值会减少 1 天,我不知道为什么。我已经调试了我的 Angular 6 代码,发现它传递了我选择的确切日期,但是当该模型到达 Web API 时,日期会晚 1 天。
谁能描述一下为什么会出现这个问题以及如何解决这个问题?
一个可能的罪魁祸首是客户端和服务器之间的时区偏移。
当 JavaScript 日期通过 Angular HTTP 客户端发送时,数据将使用 JSON.stingify() 方法转换为 JSON 字符串。这将使用 ISO 8601 格式将所有日期转换为字符串,如下所示:
YYYY-MM-DDTHH:mm:ss.sssZ
Run Code Online (Sandbox Code Playgroud)
这种格式的一个令人困惑的方面是末尾字母 Z 的用途,它代表 Zulu,或零 UTC 时区偏移。
当日期转换为该字符串时,数字时间值实际上被修改为不反映时区偏移,而不是客户端的时区偏移。这是为了在服务器位于不同时区的情况下标准化实际时间。
重要的是确保 Web API 设置为基于零 UTC 偏移来解释时间的字符串值表示形式。
| 归档时间: |
|
| 查看次数: |
16848 次 |
| 最近记录: |