我在 SQL Server 2005 数据库中保存了以下日期时间:2012-12-06 16:20:11.010
。
我想在客户端使用 javascript 显示此日期时间,因此我使用 System.Web.Helpers.Json.Encode
将其序列化(作为更大对象的一部分),它运行以下命令代码:
internal static readonly long DatetimeMinTimeTicks = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).Ticks;
private static void SerializeDateTime(DateTime datetime, StringBuilder sb, JavaScriptSerializer.SerializationFormat serializationFormat)
{
if (serializationFormat == JavaScriptSerializer.SerializationFormat.JSON)
{
sb.Append("\"\\/Date(");
sb.Append((datetime.ToUniversalTime().Ticks - JavaScriptSerializer.DatetimeMinTimeTicks) / 10000L);
sb.Append(")\\/\"");
return;
}
sb.Append("new Date(");
sb.Append((datetime.ToUniversalTime().Ticks - JavaScriptSerializer.DatetimeMinTimeTicks) / 10000L);
sb.Append(")");
}
在客户端,我将它转换为日期时间对象,如下所示:( JSFiddle )
var strDate = "/Date(1354828811010)/"; //value returned by above function
var re = /-?\d+/;
var m = re.exec(strDate);
var date = new Date(parseInt(m[0]));
在时区设置为东部标准时间的 PC 上,此时间正确显示为 Thu Dec 06 2012 16:20:11 GMT-0500(东部标准时间)
。但是,在时区为 GMT-6 的电脑上,它返回为 Thu Dec 06 2012 15:20:11 GMT-0600(中部标准时间)
。
这个时间是正确的 Thu Dec 06 2012 16:20:11 GMT-0600(中部标准时间)
,但我不确定如何最好地正确显示它。我不需要实际显示时区,我只需要它显示为 16:20:11,而不管用户的本地时区设置如何。
javascript 中是否有一种机制可以让我将日期强制到特定时区?我对它所做的研究表明没有。
否则,如果我需要更改服务器端,我最好的选择是什么?
最佳答案
我相信您要查找的内容与 Moment.js issue 611 中描述的内容相关.如果是这样,请将您的反馈添加到此问题中好吗?这对我来说无疑是一个亮点。
顺便说一句 - 我也查看了 DateJS 和 XDate,据我所知,没有一个具有此功能。 JavaScript 似乎锁定在 UTC 或浏览器的本地时区。
此外,Moment.js 已经处理了 JavaScriptSerializer
发出的 Microsoft 日期格式,因此您可以直接使用它。但是,我强烈建议使用 JSON.Net反而。甚至微软现在也在使用它。默认情况下,它将返回 ISO 格式的日期。
关于c# - 具有特定时区的 Javascript 整数到日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16147253/