获取客户端时间,而无需输出 JavaScript 并返回回发



我需要知道客户端的时间。我的行动方案是将偏移量保留在 cookie 中,然后进行计算。我的问题是我需要插入cookie,即使在加载第一页时也是如此。我知道有很多方法,但没有人回答需求。我需要在加载第一页之前使用本地时间。所以我不能使用 JavaScript。

我试图在帖子中将用户发送回客户端,放置cookie,然后将其返回到服务器,但这对谷歌来说是有问题的,因为他们没有cookie。

这是函数:

public static DateTime? GetClientTime()
    {
        HttpRequest Request = HttpContext.Current.Request;
        if (Request.Cookies["DynoOffset"] != null)
        {
            string strOffset = Request.Cookies["DynoOffset"].Value;
            int offset = int.Parse(strOffset);
            TimeZone localZone = TimeZone.CurrentTimeZone;
            DateTime currentDate = DateTime.Now;
            DateTime CreationDate = localZone.ToUniversalTime(currentDate).AddMinutes(-offset);
            return CreationDate;
        }
        else
        {
            StoreClientTime();
            return null;
        }
    }
    public static DateTime? StoreClientTime()
    {
        var Context = HttpContext.Current;
        var Session = Context.Session;
        var Response = Context.Response;
        var Request = Context.Request;
        // if the local time is not saved yet in Session and the request has not posted the localTime
        if (Request.Cookies["DynoOffset"] == null && String.IsNullOrEmpty(Request.Params["localTime"]))
        {
            // then clear the content and write some html a javascript code which submit the local time
            Response.ClearContent();
            Response.Write("<form id='local' method='post' name='local'>" +
                "<script src="/Js/jquery-1.7.1.min.js" type="text/javascript"></script>" +
                "<script src="/Js/JqueryUI/jquery.cookie.js" type="text/javascript"></script>" +
                "<script type="text/javascript">" +
                    "$.cookie("DynoOffset", new Date().getTimezoneOffset(), { expires: 150 });" +
                    "$("#local").submit()" +
                "</script>" +
                "</form>");
            // 
            Response.Flush();
            // end the response so PageLoad, PagePreRender etc won't be executed
            Response.End();
            return null;
        }
        else
        {
            return GetClientTime().Value;
        }
    }

我想根据计算找到偏移量,但我不知道该怎么做。

几件事:

  • 您正在做太多工作,无法在 UTC 时间完成。 只需使用DateTime.UtcNow.
  • 编写脚本回发已成为过去。 你已经表明你正在使用jquery,所以只需做一个ajax帖子将其发送到服务器。 这也将解决您的谷歌问题。
  • 如果你的第一页需要它,那么发送UTC时间并在客户端上转换它 - 或者做一个ajax get来检索它。
  • 请记住,用户可以将时钟设置为他们想要的任何时区,并且由于夏令时/夏令时,许多用户的偏移量可以并且将会更改。 如果您将其偏移量保存在永久 cookie 中,则更改后它们返回时将有错误的时间。 确保它位于临时 cookie 中,并且您可能希望经常重置它。
  • 说您正在使用客户端的本地时间处理数据? 你能详细说明一下是为了什么吗? 这是一件非常危险的事情,因为当地时间可能模棱两可。 您可能应该基于 UTC 进行处理。 如果在处理时需要客户端的偏移量,则应在服务器上使用DateTimeOffset。 在此处查看。

相关内容

  • 没有找到相关文章

最新更新