Подтвердить что ты не робот

Как получить дату и время клиента в ASP.NET?

Думаю, в этом все сказано. Если я использую DateTime.Now, я получаю дату и время с точки зрения сервера. Я слышал о решении JavaScript, но мне интересно, есть ли другое решение.

спасибо

4b9b3361

Ответ 1

Что бы я сделал, это создать скрытое поле ввода, а затем подключить Javascript-процедуру к событию onsubmit для формы. Эта процедура будет заполнять скрытое поле временем на клиентской машине.

Скрытое поле может использоваться с ASP.NET с помощью класса HTML "HtmlInputHidden". Вы просто даете вам контроль ввода атрибута runat = "server", как и любой другой серверный элемент управления.

Затем сервер может прочитать это время, когда форма отправляется обратно. Вы можете даже обернуть это в серверном элементе управления, если вам нужно сделать это в нескольких местах.

В качестве альтернативы вы можете сделать это с помощью AJAX, но реализация будет зависеть от используемой вами библиотеки.

Ответ 2

Мне нравится идея использования браузера/системного времени и часового пояса или позволяющая им выбирать свой часовой пояс. В прошлом проекте я использовал что-то вроде этого:

<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

Не забудьте использовать минуты, так как не все часовые пояса целые часы.

Ответ 3

если вы поддерживаете профиль пользователя, вы можете попросить их рассказать вам свой часовой пояс, а затем выполнить необходимые вычисления.

Ответ 4

Альтернативой является геолокация пользователя на основе его/ее IP-адреса. Или геолокация, если браузер имеет эту возможность (скоро для Firefox). Когда у вас есть местоположение пользователя, вы можете найти часовой пояс.

Решение javascript, вероятно, является хорошим и легким.

Ответ 5

Клиент и сервер не могут быть полностью синхронизированы, поэтому возникает вопрос, хотите ли вы время на клиентском компьютере или хотите время на сервере, но настроены на различия в часовых поясах. Javascript может дать вам время на клиенте (включая часовой пояс). Вы также можете комбинировать время на сервере с часовым поясом клиента.

Тем не менее, вы никогда не можете получить время с более высокой точностью, чем размерность запроса.

Ответ 6

Я использовал этот метод в ASP.Net с VB

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

Это даст формат времени данных компьютера, просматривающего данные.