2008-11-08 97 views
23

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

+0

JavaScript可能很糟糕,因爲很多用戶的時間設置不準確。另外,它可能會被某人濫用。您必須驗證UTC的偏移量是否合理。 – hangy 2008-11-08 15:32:23

回答

11

我會做的是創建一個隱藏的輸入字段,然後將一個JavaScript例程連接到窗體的onsubmit事件。這個例程將在客戶端機器上用時間填充隱藏字段。

隱藏字段可以通過使用HTML控件「HtmlInputHidden」類與ASP.NET一起使用。你只要給你輸入控制一個runat =「服務器」屬性就像任何其他服務器端控制。

然後,服務器可以在表單回傳後這段時間內讀出。如果你需要在很多地方這樣做,你甚至可以把它包裝在一個服務器控件中。

另外,你可以用AJAX做到這一點,但實現將取決於你使用的庫。

+2

而不是做所有這些,只需使用Javascript來設置一個cookie,存儲瀏覽器時區。然後後端可以隨時讀取該cookie。 – 2014-05-14 22:05:47

+0

Cookie存在的問題是人們旅行。 – 2018-02-21 15:38:56

4

如果你維護一個用戶配置文件,你可以讓他們告訴你他們的時區,然後做必要的計算。

0

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

JavaScript解決方案可能是一個很好的和容易的。

+2

IP不一定會給出正確的答案。我有一個客戶端使用單個站點進行所有網絡連接(從一個站點到另一個站點的直接管道),因此所有這些客戶端都來自CST IP,無論他們身在何處。 – 2008-11-08 16:26:15

+0

Stephen:我們的業務是隱藏客戶IP,因此VPN-in位於布拉格,代理服務器位於柏林。例如,客戶是在莫斯科。 – abatishchev 2011-02-26 01:46:46

0

客戶端和服務器可能不完全同步,所以問題是如果你想在客戶端計算機上的時間,或者你想在服務器上的時間,但調整時區差異。 Javascript可以讓你在客戶端的時間(包括時區)。您還可以將服務器上的時間與客戶端的時區組合在一起。

儘管如此,您永遠無法獲得比請求的正確性更高的精度。

16

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

<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 

只記得使用分鐘,因爲並非所有的時區都是整小時。

-5

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

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

這將產生計算機的觀察數據的數據時間格式。

相關問題