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

c# .net asp.net datetime client-side

57444 просмотра

6 ответа

Когда я использую, DateTime.Nowя получаю дату и время с точки зрения сервера. Есть ли способ получить дату и время клиента в ASP.NET?

Автор: Arief Источник Размещён: 12.11.2019 09:57

Ответы (6)


11 плюса

Решение

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

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

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

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

Автор: Simon Johnson Размещён: 08.11.2008 04:11

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

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

Автор: Ryan Размещён: 08.11.2008 05:51

5 плюса

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

Автор: Stephen Wrighton Размещён: 08.11.2008 03:28

0 плюса

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

Решение javascript, вероятно, хорошее и простое.

Автор: Keltex Размещён: 08.11.2008 03:30

0 плюса

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

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

Автор: JacquesB Размещён: 08.11.2008 03:35

-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

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

Автор: Yoshida Hiro Размещён: 27.06.2012 06:18
Вопросы из категории :
32x32