クライアントの時間を知る必要があります。私の行動方針は、Cookieにオフセットを保持してから、計算することです。私の問題は、最初のページをロードしているときでも、まだCookieを挿入する必要があることです。たくさんの方法があることは知っていますが、誰もその必要性に答えません。最初のページが読み込まれる前に現地時間を使用する必要があります。そのため、JavaScriptを使用できません。
投稿でユーザーをクライアントに送り返し、Cookieを入れてサーバーに返そうとしましたが、Cookieがないため、Googleにとっては問題があります。
関数は次のとおりです。
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;
}
}
カルチュアに基づいてオフセットを見つけようと思いましたが、どうすればいいのかわかりません。