我正在使用ASP.NET MVC,我希望将我的所有 DateTime 值以 UTC 格式存储在服务器上。我希望 DateTime 值的所有传输都采用 UTC 格式。但我想在本地时间在浏览器中显示 DateTimes。我一直感到困惑并且无法使其正常工作。下面是我的过程......
在我的 UI 中,用户可以输入一个日期,我将其组合成一个字符串并用于创建一个 Date 对象。它最终看起来像这样:
var dt = new Date("3/23/2012 8:00 AM");
因此,用户打算为他们的时间上午 8 点创建一个日期。现在我希望以 UTC 格式将其发送到服务器,所以我有这个方法:
Date.prototype.toUTC = function ()
{
var self = this;
return new Date(self.getUTCFullYear(), self.getUTCMonth(), self.getUTCDate(), self.getUTCHours(), self.getUTCMinutes());
};
我这样使用:
data.startDt = dt.toUTC(); //Data is the object being set to the server
然后我使用 jQuery 进行 Ajax 调用以将数据对象发送到服务器。在服务器上,当我调试并检查传入的数据时,我看到 StartDt(映射到.NET DateTime 对象)为 {3/23/2012 12:00:00 PM}。
这是我存储在数据库中的值。我不完全确定它是正确的。
客户端和服务器都位于美国东部 (UTC-05:00)。
现在,当我以 JSON 格式将此日期发送回客户端时,.NET 会发送以下内容:
"/Date(1332518400000)/"
在 JavaScript 中,我以这种方式解析它:
var dt = new Date(parseInt(serverDt.substr(6))); //parseInt ingnores last /
我的想法是这dt
是一个 UTC 日期,但我可以通过调用以本地格式显示它,toShortTime()
如下所示:
Date.prototype.get12Hour = function ()
{
var h = this.getHours();
if (h > 12) { h -= 12; }
if (h == 0) { h = 12; }
return h;
};
Date.prototype.getAMPM = function ()
{
return (this.getHours() < 12) ? "AM" : "PM";
};
Date.prototype.toShortTime = function ()
{
return this.get12Hour() + ":" + this.getMinutes() + " " + this.getAMPM();
};
但这并没有给我想要的上午 8:00 回来。它给了我 12:00 PM。我哪里错了?