从Javascript中的.net DateTime JSON格式字符串中获取正确的日期值

Get correct date value from .NET DateTime JSON format string in Javascript

本文关键字:获取 日期 字符串 中的 Javascript net DateTime 格式 JSON      更新时间:2023-09-26

我有一个javascript应用程序,从ASP接收数据。. NET WebService的JSON格式。我的应用程序有很多操作日期,它也从WebService接收。

WebService以EST时区存储所有日期,并以以下格式发送:

{"Date":"'/Date(1319205600000+0300)'/"} 

到我的javascript应用程序

在客户端,我应该在EST时区显示所有日期,而不管浏览器的时区。如果我从服务器接收到:

2011年10月21日10:00

我应该向用户显示完全相同的时间。

要转换日期,我要这样做:

function convert_date(millisec) {
    var date = new Date(millisec),
        local_offset = date.getTimezoneOffset(),
        server_offset = -5 * 60, //EST offset
        diff = (local_offset + server_offset) * 60000;
    return new Date(millisec + diff);
}

但关键是server_offset并不总是应该是-5。根据夏令时值的不同,取值范围为-4。我试图做server_offset = (date.isDST() ? -4 : -5) * 60代替,但我还没有找到捕获isDST()的任何解决方案,它适用于所有本地客户端时区。他们中的大多数工作良好的本地浏览器的时区,DST与EST时区相同的值,但会失败的情况下,例如GMT+5:30时区。

所以有任何方法来确定是否DST将适用于某些特定日期在EST时区从javascript?

也许我错过了什么?

如果你可以修改web服务,我也会让它返回一个标志,表明它是否在服务器的时区(EST)中是夏令时。

假设您不能这样做,您可以根据美国夏令时的以下信息确定是否为夏令时:

夏时制从3月的第二个星期日开始,到11月的第一个星期日结束。

需要注意的是,这在未来可能会改变(我甚至不知道它在2007年已经改变了)。

我真的不确定你是如何得到你传递给函数的ticks值,我认为你有一些奇怪的事情发生在那里。但是,如果问题是如何编写isDST()函数,那么这应该是相当简单的。

Date.prototype.isDST = function()
{
    var dt = new Date(this.getYear(), 1, 1);
    return dt.getTimezoneOffset() > this.getTimezoneOffset();
}