1

我在 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 (Eastern Standard Time). 但是,在时区为 GMT-6 的电脑上,它返回为Thu Dec 06 2012 15:20:11 GMT-0600 (Central Standard Time).

这次是正确的Thu Dec 06 2012 16:20:11 GMT-0600 (Central Standard Time),但我不确定如何最好地正确显示它。我不需要实际显示时区,我只需要它显示为 16:20:11 而不管用户的本地时区设置如何。

javascript中是否有一种机制可以让我将日期强制到特定时区?我对它所做的研究表明没有。

否则,如果我需要更改服务器端,我最好的选择是什么?

4

3 回答 3

2

我相信您正在寻找的内容与Moment.js 问题 611中描述的内容有关。如果是这样,请您将您的反馈添加到此问题中吗?这对我来说当然是一个很好的选择。

顺便说一句 - 我也查看了 DateJS 和 XDate,据我所知,没有一个具有此功能。JavaScript 似乎锁定在 UTC 或浏览器的本地时区。

此外,Moment.js 已经处理了发出的 Microsoft 日期格式JavaScriptSerializer,因此您可以直接使用它。但是,我强烈建议改用JSON.Net。甚至微软现在也在使用它。默认情况下,它将以 ISO 格式返回日期。

于 2013-04-23T03:16:42.377 回答
1

看看Moments.js,它是众多可以帮助您满足日期/时间要求的 JavaScript 日期库之一。

其他包括datejsXdate

于 2013-04-22T12:40:49.407 回答
0

DateTime.ToUniversalTime() 将在序列化值中包含时区,并且 javascript 将读取它。如果您不希望这种情况发生,请不要使用时区对其进行序列化。只需使用 DateTime.toString() 方法并给它一个简单的格式字符串,例如:

datetime.toString("o");

这将输出类似

2008-06-15T21:15:07.0000000
于 2013-04-22T12:49:47.357 回答