2008-11-08 37 views
23

Khi tôi sử dụng DateTime.Now Tôi nhận ngày và giờ từ quan điểm của máy chủ. Có cách nào để nhận được khách hàng ngày và giờ trong ASP.NET không?Làm thế nào để có được ngày và thời gian của khách hàng trong ASP.NET?

+0

JavaScript có thể không tốt vì nhiều người dùng đã đặt thời gian của họ không chính xác. Ngoài ra, nó có thể bị lạm dụng bởi một người nào đó. Bạn phải xác nhận liệu bù đắp cho UTC là hợp lý hay không chắc chắn. – hangy

Trả lời

11

Điều tôi muốn làm là tạo trường nhập ẩn và sau đó gửi một thói quen Javascript đến sự kiện onsubmit cho biểu mẫu. Quy trình này sẽ điền vào trường ẩn với thời gian trên máy khách.

Trường ẩn có thể được sử dụng với ASP.NET bằng cách sử dụng lớp kiểm soát HTML "HtmlInputHidden". Bạn chỉ cần cung cấp cho bạn điều khiển đầu vào một thuộc tính runat = "server" giống như bất kỳ điều khiển phía máy chủ nào khác.

Máy chủ sau đó có thể đọc lần này khi biểu mẫu đăng lại. Bạn thậm chí có thể quấn này lên trong một điều khiển máy chủ nếu bạn cần phải làm điều này ở một số nơi.

Hoặc, bạn có thể làm điều này với AJAX nhưng việc triển khai sẽ phụ thuộc vào thư viện bạn sử dụng.

+2

Thay vì làm tất cả, chỉ cần sử dụng Javascript để đặt cookie, lưu trữ múi giờ của trình duyệt. Sau đó, chương trình phụ trợ có thể đọc cookie đó bất cứ khi nào. –

+0

Vấn đề với cookie là mọi người đi du lịch. –

4

nếu bạn đang duy trì hồ sơ người dùng, bạn có thể yêu cầu họ cho bạn biết múi giờ của họ và sau đó thực hiện các tính toán cần thiết.

0

Cách khác là định vị người dùng dựa trên địa chỉ IP của anh ấy/cô ấy. Hoặc định vị địa lý nếu trình duyệt có khả năng này (sắp có cho Firefox). Khi bạn có vị trí của người dùng, bạn có thể tra cứu múi giờ.

Giải pháp javascript có lẽ là giải pháp tốt và dễ dàng.

+2

IP sẽ không nhất thiết phải trả lời đúng. Tôi có một khách hàng sử dụng một trang web duy nhất cho tất cả các kết nối mạng (đường ống trực tiếp từ một trang web khác) để tất cả chúng đến từ một IP CST bất kể họ đang ở đâu. –

+0

Stephen: Chúng tôi làm kinh doanh để ẩn IP của khách hàng để VPN-in ở Prague và proxy-out là ở Berlin. Và khách hàng là, ví dụ, ở Moscow. – abatishchev

0

Máy khách và máy chủ có thể không được đồng bộ hóa hoàn toàn, do đó, câu hỏi là nếu bạn muốn thời gian trên máy khách hoặc bạn muốn thời gian trên máy chủ, nhưng được điều chỉnh cho chênh lệch múi giờ. Javascript có thể giúp bạn có được thời gian trên máy khách (bao gồm cả múi giờ). Bạn cũng có thể kết hợp thời gian trên máy chủ với múi giờ của ứng dụng khách.

Tuy nhiên, bạn không bao giờ có thể có được thời gian có độ chính xác cao hơn độ trễ của yêu cầu.

16

Tôi thích ý tưởng sử dụng thời gian/thời gian của trình duyệt/hệ thống hoặc cho phép họ chọn múi giờ của họ. Trong một dự án trước đây tôi đã sử dụng một cái gì đó như thế này:

<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> 

Và sau đó trên máy chủ:

/// <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; 
} 

Hoặc bạn có thể vượt qua nó như một tham số URL và xử lý nó trong Page_Load:

http://host/page.aspx?tz=-360 

Chỉ cần nhớ sử dụng phút, vì không phải tất cả các múi giờ đều là toàn bộ giờ.

+0

dòng này không rõ ràng Int32.TryParse (cookie.Value, kết quả ra); bạn lưu trữ giá trị cookie trong biến kết quả nhưng trước khi u lưu tổng số phút vào biến kết quả. không phải rất rõ ràng chức năng thường xuyên phía máy chủ của bạn GetTimeZoneOffset() chức năng. nếu có thể plzz giải thích. – Thomas

+0

@Thomas Tôi bắt đầu với múi giờ của Máy chủ và sau đó kiểm tra xem liệu cookie múi giờ của khách hàng có tồn tại hay không. Nếu cookie tồn tại, hãy thử chuyển đổi chuỗi thành số nguyên. – Ryan

-5

tôi đã sử dụng phương pháp này trong ASP.Net với VB

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

này sẽ mang lại các định dạng dữ liệu thời gian của máy tính nhìn vào dữ liệu.

+6

Chào mừng bạn đến với StackOverflow! Vui lòng đọc lại câu hỏi. Người dùng muốn biết thời gian địa phương của khách hàng, không phải là định dạng thời gian. –

Các vấn đề liên quan