Это работает, но мне было интересно, есть ли у кого-нибудь лучший метод.
Цель:
Получить смещение DateTime клиента и вернуть значения DateTime по местному времени клиента.
Что я сделал:
На внешнем интерфейсе я создал собственный заголовок и передал его в запросе.
export class ItemService {
baseUrl = environment.apiUrl;
httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'application/json',
'TimeZone-Offset': `${new Date().getTimezoneOffset()}`
})
}
constructur(private authHttp: HttpClient) { }
getItems() {
return this.authHttp.get<Item[]>(this.baseUrl + 'items',
{ headers: this.httpOptions.headers });
}
}
Затем насерверная часть, я вытащил значение заголовка, преобразовал его в целое число, затем преобразовал время UTC в местное, используя функциональность AddMinutes
.
public class ItemsController : Controller
{
[HttpGet]
public async Task<IActionResult> GetItems()
{
var currentTime = DateTime.UtcNow.AddMinutes(int.Parse(
Request.Headers["TimeZone-Offset"] != StringValues.Empty
? Request.Headers["TimeZone-Offset"][0] : "0"));
// ...logic to return items
}
Итак, если добавлен заголовок TimeZone-Offsetсервер сможет конвертировать DateTimes в местное время клиента, в противном случае DateTimes будет указан в UTC.Есть ли способ лучше?Должен ли я просто оставить все UTC на сервере, а затем выполнить преобразование UTC в локальное на стороне клиента?