Было бы более полезно добавить код к вашему вопросу , чтобы мы могли видеть, как ваш код работает сквозным . Тем не менее, я думаю, из вашего описания я могу определить проблему:
Вернувшись в JS при запросе данных, я использую модель представления с типом Date. Но объект из модели представления представляет собой строку "2019-07-10T10:00:00"
.
Где-то в вашем коде вы загружаете значение из базы данных обратно в DateTime
объект. Например, если вы используете DataReader
для загрузки ваших данных, вы можете делать что-то вроде этого:
DateTime dt = (DateTime) someDataReader["@TheDateTimeDBField"];
При этом полученное значение будет иметь свойство Kind
, установленное на DateTimeKind.Unspecified
. Это позже заставляет сериализацию не включать какую-либо информацию о смещении.
Ваш код не имеет никакой информации, чтобы сказать, что значения в вашей базе данных указаны в UTC. Со значениями DateTime
вы должны сделать это явно после загрузки:
DateTime dt = (DateTime) someDataReader["@TheDateTimeDBField"];
dt = DateTime.SpecifyKind(dt, DateTimeKind.Utc);
Это установит для свойства Kind
значение DateTimeKind.Utc
, которое позже будет сериализовано с добавленным Z
. (Это работает, потому что формат даты по умолчанию в JSON.Net включает спецификатор K
).
В качестве альтернативы рассмотрите возможность использования значений DateTimeOffset
как в коде .NET, так и в базе данных (при условии, что MS SQL Server). Затем значения будут сохранены и сериализованы со смещением. Он будет использовать +00:00
вместо Z
, но будет иметь тот же эффект.