2010-09-16 24 views

Odpowiedz

7

Myślę, że musisz przechwycić to za pomocą JavaScript, a następnie wysłać z powrotem do serwera (np. Za pomocą AJAX).

W JavaScript: var d = new Date() zrobi to, czego potrzebujesz.

http://www.w3schools.com/js/js_obj_date.asp

+0

Witam Justin, również próbowałem tego podejścia i ustawić czas z javascript i pobrać go po stronie serwera, użyłem ciasteczek i metody setTimeInterval. Zwykle działa dobrze, ale w przypadku formularzy ajax nie wiem, dlaczego wysyła stare pliki cookie. Czy możesz w tym pomóc? Dzięki – gaurav

1

There's nie sposób można to zrobić w serwerze asp.net asp.net mvc kodu.

Albo poprosi użytkownika o DtropDown listę wszystkich strefach czasowych i pozwolić mu wybrać go z listy i druga opcja jest przechwytywania czasu lokalnego systemu w architekturze klient-javascript i wysłać go do serwera na żądania AJAX lub post-back.

W rzeczywistości jest jeszcze jeden sposób - możesz zarejestrować IP komputera użytkownika i dowiedzieć się, do którego kraju należy adres IP i wybrać strefę czasową tego kraju. Możesz korzystać z bazy danych MaxMind GeoIP, która bardzo ci to ułatwi.

+0

Witam, próbowałem również tego podejścia i ustawić czas z javascript i dostać go po stronie serwera, użyłem ciasteczek i metody setTimeInterval. Zwykle działa dobrze, ale w przypadku formularzy ajax nie wiem, dlaczego wysyła stare pliki cookie. Czy możesz w tym pomóc? Dzięki. – gaurav

+1

@gaurav - Dlaczego wysyłasz czas w ciasteczkach? Czemu po prostu nie pobrać go raz, a następnie śledzić go dla tego użytkownika lub sesji? – Justin

+0

Rozumiem, dziękuję wszystkim za poświęcony cenny czas. :) – gaurav

5

To było moje rozwiązanie:

Uwaga: Wymaga jQuery.

w nagłówku pliku _Layout (lub wszystkich plików _Layout Jeśli istnieje wiele), po deklaracji jQuery, umieścić:

@if (Session["UTCOffset"] == null) 
    { 
     <script type="text/javascript"> 
      $.post('/Home/SetUTC', { UTC: new Date().getTimezoneOffset() }, function (data) { location.reload(); }); 
     </script> 
    } 

w kontrolerze Home (lub cokolwiek kontroler używasz), umieścić:

public JsonResult SetUTC(int UTC) 
     { 
      Session["UTCOffset"] = (-1*UTC).ToString(); 
      return Json(null); 
     } 

Podczas drukowania daty razy użyć (w tym przykładzie DateTime.Now):

(DateTime.Now).ToUniversalTime().AddMinutes(double.Parse((string)Session["UTCOffset"]??"-300.00")).ToString("MM-dd-yyyy") 

-300 to czas centralny (moja strefa czasowa). Jeśli są jakieś daty na pierwszej stronie, którą uderzyły, będą wyświetlane w czasie środkowym. Przez około sekundę. Następnie strona zostanie przeładowana i wszystko powinno działać zgodnie z oczekiwaniami.

Jestem pewien, że można to w jakiś sposób przystosować do konfiguracji innych niż MVC, ale zostawię to dla kogoś innego.

Powiązane problemy