У меня есть приложение Blazor Server, которое должно знать локальный часовой пояс для его работы (это приложение планирования, которое использует DXScheduler). Стратегия состоит в том, чтобы получить локальное смещение времени из браузера пользователя, используя объект JavaScript New Date () и отправка смещения обратно в C# код для манипуляции. Тем не менее, вызов JavaScript возвращает смещение часового пояса часового пояса, а не клиент. Я проверил это, изменив часовой пояс сервера и отметив, что вывод кода предсказуемо изменяется в отношении изменения часового пояса сервера. который находится в своем собственном .js файле в папке/wwwroot :
Код: Выделить всё
function getTimeZoneOffset() {
var dateString = new Date();
var offset = dateString.getTimezoneOffset();
return offset;
}
Вот код C#, который потребляет этот скрипт, который в настоящее время находится в App.razor :
Код: Выделить всё
public async Task CAllJS()
{
var offset = await JSRuntime.InvokeAsync("getTimeZoneOffset");
return offset;
}
public async Task GetUserTimeZone()
{
string jsNumberOfMinutesOffset = await CAllJS(); // sending the above offset
var timeZones = TimeZoneInfo.GetSystemTimeZones();
var numberOfMinutes = Int32.Parse(jsNumberOfMinutesOffset) * (-1);
var timeSpan = TimeSpan.FromMinutes(numberOfMinutes);
var userTimeZone = timeZones.Where(tz => tz.BaseUtcOffset == timeSpan).FirstOrDefault() ?? timeZones.First();
return userTimeZone;
}
Это примерно столько разделения, сколько я могу подумать - вызывающий абонент getUsertimezone () назначает возвратное значение статическому свойству статического класса, поэтому его можно получить в любом месте, где он необходим. Тем не менее, я все еще получаю смещение часового пояса сервера.
Мысли?
Подробнее здесь:
https://stackoverflow.com/questions/796 ... server-app