Совместное использование DateTime между сервером и JavaScript является правильным PITA. Я хотел проигнорировать часовой пояс и не чувствовал необходимости во всей библиотеке, например Moment, поэтому я написал помощник по преобразованию для Angular следующим образом:
Преобразование дат, полученных с сервера, в JavaScript:
// Reverse the timezone offset (this might only work for timezones earlier than GMT - so test)
this.translateToClient = function (input) {
if (!input) return null;
let result = new Date(Date.parse(input));
result.setMinutes(result.getMinutes() + result.getTimezoneOffset());
return result;
};
Преобразование дат в JavaScript для отправки обратно на сервер:
// Send back UTC time instead of timezone time.
this.translateToServer = function (input) {
if (!input) return null;
return new Date(Date.UTC(
input.getFullYear()
, input.getMonth()
, input.getDate()
, input.getHours()
, input.getMinutes()
, input.getSeconds()
, input.getMilliseconds()
));
};
Примечание. Некоторые серверные технологии (например, ASP. NET) также могут применяться автоматически смещение часового пояса, которое также должно быть правильно настроено.
Я обнаружил, что мне нужно отправить свой DateTime клиенту следующим образом:
DateTime.SpecifyKind(MyValue, DateTimeKind.Utc);