簡體   English   中英

如何在 ASP.NET 中獲取客戶端日期和時間?

[英]How to get client date and time in ASP.NET?

當我使用DateTime.Now我從服務器的角度獲取日期和時間。 有沒有辦法在 ASP.NET 中獲取客戶端日期和時間?

我喜歡使用瀏覽器/系統時間和時區或讓他們選擇時區的想法。 在過去的項目中,我使用了這樣的東西:

<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

請記住使用分鍾,因為並非所有時區都是整小時。

我要做的是創建一個隱藏的輸入字段,然后將一個 Javascript 例程連接到表單的 onsubmit 事件。 此例程將使用客戶端計算機上的時間填充隱藏字段。

通過使用 HTML 控件“HtmlInputHidden”類,隱藏字段可以與 ASP.NET 一起使用。 您只需為輸入控件提供一個 runat="server" 屬性,就像任何其他服務器端控件一樣。

當表單回發時,服務器可以讀出這個時間。 如果您需要在多個地方執行此操作,您甚至可以將其封裝在服務器控件中。

或者,您可以使用 AJAX 執行此操作,但實現將取決於您使用的庫。

如果您正在維護用戶配置文件,您可以要求他們告訴您他們的時區,然后進行必要的計算。

另一種方法是根據他/她的 IP 地址對用戶進行地理定位。 或者,如果瀏覽器具有此功能,則進行地理定位(Firefox 即將推出)。 獲得用戶的位置后,您可以查找時區。

javascript 解決方案可能是一個很好且簡單的解決方案。

客戶端和服務器可能不完全同步,所以問題是您是否想要客戶端計算機上的時間,或者您想要服務器上的時間,但根據時區差異進行調整。 Javascript 可以讓您獲得客戶端上的時間(包括時區)。 您還可以將服務器上的時間與客戶端的時區結合起來。

但是,您永遠無法獲得比請求延遲更精確的時間。

我在 ASP.Net 和 VB 中使用了這種方法

Dim strLanguage As String = Request.UserLanguages(0)
Dim currentCulture As CultureInfo = CultureInfo.CreateSpecificCulture(strLanguage)
Dim dateformat As String = currentCulture.DateTimeFormat.ShortDatePattern

這將產生查看數據的計算機的數據時間格式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM