Дата становится на один (1) день после отправки модели из Angular 6 в Web API - PullRequest
0 голосов
/ 04 мая 2019

Я занимаюсь разработкой веб-приложения с использованием Angular 6 и PrimeNG элементов управления для разработки Frontend и ASP.Net Web API и SQL Server для разработки Backend.

InВ одной из моих форм есть два элемента управления PrimeNG Calender для сохранения даты и даты окончания в базу данных.После отправки формы все поля формы собираются для заполнения объекта / модели и передаются этой модели в Web API.Объект / модель заполняется в Angular 6 с использованием кода Typescript.Ниже моя внешняя модель в коде 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;
}

Вот мой процесс инициализации объекта с Angular 6 и машинописным текстом:

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;

Теперь проблема в том, когда модель передается вВеб-API, С даты и даты окончания значения становятся на 1 день меньше , что я не знаю, почему.Я отладил свой код Angular 6 и вижу, что он передает точные даты, которые я выбрал, но когда эта модель поступает в Web API, даты отстают на 1 день.

Кто-нибудь может описать, почему возникает эта проблема и как ее решить?

1 Ответ

1 голос
/ 23 мая 2019

Вероятным виновником является смещение часового пояса между клиентом и сервером.

Когда даты JavaScript отправляются через Angular HTTP Client, данные преобразуются в строку JSON с помощью метода JSON.stingify (). преобразует все даты в строки в формате ISO 8601 , например:

YYYY-MM-DDTHH:mm:ss.sssZ

Одним из сбивающих с толку аспектов этого формата является назначение буквы Z в конце, обозначающей Zulu или смещение часового пояса Zero UTC.

Когда дата преобразуется в эту строку, числовое значение времени фактически изменяется, чтобы отразить отсутствие смещения часового пояса вместо смещения часового пояса клиента. Это нормализует фактическое время, если сервер находится в другом часовом поясе.

Важно убедиться, что Web API настроен на интерпретацию этого представления строкового значения времени на основе нулевого смещения UTC.

...