SignalR日期时间格式

时间:2012-11-13 17:07:40

标签: signalr

我在服务器端代码c#.net4中使用SignalR。 在客户端我正在使用javascript。

当我从服务器调用客户端方法时,例如

    Caller.ShowDate(DateTime.Now);

客户端javascript以字符串形式获取“2012-11-13T19:02:39.3386544 + 02:00”的值。

如何在javascript中将其用作日期?

3 个答案:

答案 0 :(得分:4)

请记住,由于时区/客户端修改时钟等,客户端时间可能与服务器时间完全不同。这就是说:

C#:

Caller.ShowDate(DateTime.UtcNow);

JavaScript的:

myHub.client.ShowDate = function(d) {
    var serverTime = new Date(d); // The Server Time in JavaScript
}

答案 1 :(得分:0)

如果你是使用IE8的不快乐的人,那么可以阅读下面的评论:

SignalR使用Json.Net库来(de)序列化数据。

.NET 4.5之前Json.NET使用了epoch-format(“/ Date(1198908717056)/”)然后开始使用ISO8601标准(“2012-03-19T07:22Z”)[见Serializing Dates in JSON]

如果你想使用纪元格式,你需要重新配置json-serializator [见Replacing the IJsonSerializer]

public class Global : System.Web.HttpApplication
{
    protected void Application_Start(object sender, EventArgs e)
    {
        var serializer = new JsonNetSerializer(new JsonSerializerSettings
        {
            DateFormatHandling = DateFormatHandling.MicrosoftDateFormat,
            NullValueHandling = NullValueHandling.Ignore
        });

        GlobalHost.DependencyResolver.Register(typeof(IJsonSerializer), () => serializer); 
    }
}

在客户端,您可以使用此代码将纪元时间转换为日期:

function epochUtcToDate(epochUtc) {
    return new Date(parseInt(epochUtc.substr(6), 10));
};

答案 2 :(得分:0)

如果您要为Json日期添加时区,则需要使用服务器的本地时间

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        GlobalHost.HubPipeline.AddModule(new ElmahPipelineModule());
        app.Map("/signalr", map =>
        {
            map.UseCors(CorsOptions.AllowAll);
            var hubConfiguration = new HubConfiguration
            {
            };
            map.RunSignalR(hubConfiguration);
        });
        var jsonSerializer =  new JsonSerializer();
        jsonSerializer.DateFormatHandling = DateFormatHandling.IsoDateFormat;
        jsonSerializer.DateTimeZoneHandling = DateTimeZoneHandling.Local;
        jsonSerializer.NullValueHandling = NullValueHandling.Ignore;
        GlobalHost.DependencyResolver.Register(typeof(JsonSerializer), () => jsonSerializer);


    }
}