我在我的服务器端代码 c# .net4 中使用 SignalR。在客户端我使用 javascript。
例如,当我从服务器调用客户端方法时
Caller.ShowDate(DateTime.Now);
客户端javascript获取“2012-11-13T19:02:39.3386544+02:00”作为字符串的值。
如何在 javascript 中使用它作为日期?
我在我的服务器端代码 c# .net4 中使用 SignalR。在客户端我使用 javascript。
例如,当我从服务器调用客户端方法时
Caller.ShowDate(DateTime.Now);
客户端javascript获取“2012-11-13T19:02:39.3386544+02:00”作为字符串的值。
如何在 javascript 中使用它作为日期?
请记住,由于时区/客户端修改时钟等,客户端时间可能与服务器时间有很大不同。话虽如此:
C#:
Caller.ShowDate(DateTime.UtcNow);
JavaScript:
myHub.client.ShowDate = function(d) {
var serverTime = new Date(d); // The Server Time in JavaScript
}
如果你不喜欢使用 IE8 的人,那么可以阅读下面的评论:
SignalR 使用 Json.Net 库来(反)序列化数据。
在 .NET 4.5 之前,Json.NET 使用 epoch-format ("/Date(1198908717056)/"),然后开始使用 ISO8601 标准 ("2012-03-19T07:22Z") [请参阅JSON 中的序列化日期]。
如果你想使用 epoch-format,你需要重新配置 json-serializator [参见更换 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));
};
如果您已将时区添加到 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);
}
}