ASP.NETでクライアントの日付と時刻を取得する方法は?
-
07-07-2019 - |
質問
DateTime.Now
を使用すると、サーバーの観点から日付と時刻を取得します。 ASP.NETでクライアントの日付と時刻を取得する方法はありますか?
解決
非表示の入力フィールドを作成し、Javascriptルーチンをフォームのonsubmitイベントに配線します。このルーチンは、非表示フィールドにクライアントマシンの時間を入力します。
非表示フィールドは、HTMLコントロール" HtmlInputHidden"を使用してASP.NETで使用できます。クラス。入力コントロールにrunat =" server"を与えるだけです。他のサーバー側コントロールと同様の属性。
フォームがポストバックすると、サーバーはこの時間を読み取ることができます。これをいくつかの場所で行う必要がある場合は、サーバーコントロールでこれをラップすることもできます。
別の方法として、AJAXでこれを行うこともできますが、実装は使用するライブラリに依存します。
他のヒント
ブラウザ/システムの時間とタイムゾーンを使用するか、タイムゾーンを選択させるというアイデアが好きです。過去のプロジェクトでは、次のようなものを使用しました。
<script language="javascript">
function checkClientTimeZone()
{
// Set the client time zone
var dt = new Date();
SetCookieCrumb("ClientDateTime", dt.toString());
var tz = -dt.getTimezoneOffset();
SetCookieCrumb("ClientTimeZone", tz.toString());
// Expire in one year
dt.setYear(dt.getYear() + 1);
SetCookieCrumb("expires", dt.toUTCString());
}
// Attach to the document onload event
checkClientTimeZone();
</script>
そしてサーバー上で:
/// <summary>
/// Returns the client (if available in cookie) or server timezone.
/// </summary>
public static int GetTimeZoneOffset(HttpRequest Request)
{
// Default to the server time zone
TimeZone tz = TimeZone.CurrentTimeZone;
TimeSpan ts = tz.GetUtcOffset(DateTime.Now);
int result = (int) ts.TotalMinutes;
// Then check for client time zone (minutes) in a cookie
HttpCookie cookie = Request.Cookies["ClientTimeZone"];
if (cookie != null)
{
int clientTimeZone;
if (Int32.TryParse(cookie.Value, out clientTimeZone))
result = clientTimeZone;
}
return result;
}
または、URLパラメーターとして渡し、Page_Loadで処理することができます:
http://host/page.aspx?tz=-360
すべてのタイムゾーンが完全な時間ではないため、分を使用することを忘れないでください。
ユーザープロフィールを管理している場合は、ユーザーにタイムゾーンを教えてもらい、必要な計算を行うことができます。
別の方法は、ユーザーのIPアドレスに基づいてユーザーの位置を特定することです。または、ブラウザにこの機能がある場合はジオロケーションします(Firefoxで近日公開予定)。ユーザーの場所がわかったら、タイムゾーンを検索できます。
javascriptソリューションはおそらく優れた簡単なソリューションです。
クライアントとサーバーは完全に同期されていない可能性があります。そのため、質問は、クライアントコンピューターで時刻を取得するのか、サーバーで時刻を取得するが、タイムゾーンの差を調整するのかです。 Javascriptは、クライアントの時間(タイムゾーンを含む)を取得できます。サーバー上の時間とクライアントのタイムゾーンを組み合わせることができます。
ただし、リクエストのレイテンシよりも高い精度で時間を取得することはできません。
VBを使用してASP.Netでこのメソッドを使用しました
Dim strLanguage As String = Request.UserLanguages(0)
Dim currentCulture As CultureInfo = CultureInfo.CreateSpecificCulture(strLanguage)
Dim dateformat As String = currentCulture.DateTimeFormat.ShortDatePattern
これにより、データを参照するコンピューターのデータ時刻形式が生成されます。