You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Blazor Server应用中JavaScript new Date()返回服务器时区偏移而非客户端的问题排查与解决咨询

Blazor Server应用中JavaScript new Date()返回服务器时区偏移而非客户端的问题排查与解决咨询

我现在遇到了一个Blazor Server应用里的时区问题,想请教大家的思路。我的应用是一个使用DxScheduler的调度系统,需要获取用户浏览器的本地时区来处理调度逻辑。

原本的思路是通过JavaScript的new Date()获取客户端的时区偏移量,再把这个值传给C#代码做后续处理。经过反复测试,C#这边的时区转换逻辑是正常工作的,但现在的核心问题是:JS代码返回的居然是服务器的时区偏移,而不是客户端的!我特意修改了服务器的时区设置,JS返回的偏移值会跟着服务器时区同步变化,这就实锤了这点。

我猜测会不会是Blazor环境把这段JS代码沙箱化了,类似Node.js的运行环境?那有没有办法让这段JS代码真正在客户端浏览器的环境里执行,而不是在服务器的沙箱中?

先贴一下我的JS代码,它放在/wwwroot目录下的独立.js文件里:

function getTimeZoneOffset() {
    var dateString = new Date();
    var offset = dateString.getTimezoneOffset();
    return offset;
}

再看看调用这段JS的C#代码,现在是写在App.razor里的:

public async Task<string> CAllJS()
{
    var offset = await JSRuntime.InvokeAsync<string>("getTimeZoneOffset");
    return offset;
}

public async Task<TimeZoneInfo> GetUserTimeZone()
{
    string jsNumberOfMinutesOffset = await CAllJS();
    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()的地方会把返回值赋值给一个静态类的静态属性,方便全局使用,但问题还是没解决。有没有人遇到过类似的情况,或者知道怎么让这段JS代码真正在客户端浏览器里执行,拿到正确的客户端时区偏移?

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 03:09:47