24 Stimmen

Wie erhalte ich Datum und Uhrzeit des Clients in ASP.NET?

Wenn ich die DateTime.Now Ich erhalte das Datum und die Uhrzeit aus der Sicht des Servers. Gibt es eine Möglichkeit, die Kunde Datum und Uhrzeit in ASP.NET?

17voto

Ryan Punkte 7525

Mir gefällt die Idee, entweder die Browser-/Systemzeit und die Zeitzone zu verwenden oder sie ihre Zeitzone wählen zu lassen. In einem früheren Projekt habe ich etwas Ähnliches verwendet:

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

Und dann auf dem Server:

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

Oder Sie können ihn als URL-Parameter übergeben und ihn im Page_Load behandeln:

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

Denken Sie nur daran, Minuten zu verwenden, da nicht alle Zeitzonen ganze Stunden haben.

12voto

Simon Johnson Punkte 7722

Was ich tun würde, ist ein verstecktes Eingabefeld zu erstellen und dann Draht eine Javascript-Routine auf das onsubmit Ereignis für das Formular. Diese Routine würde das versteckte Feld mit der Zeit auf dem Client-Rechner auffüllen.

Das verborgene Feld kann mit ASP.NET verwendet werden, indem die HTML-Steuerelementklasse "HtmlInputHidden" verwendet wird. Sie geben dem Eingabe-Steuerelement einfach ein runat="server"-Attribut wie jedem anderen serverseitigen Steuerelement.

Der Server kann diese Zeit dann auslesen, wenn das Formular zurückkommt. Sie könnten dies sogar in ein Server-Steuerelement verpacken, wenn Sie dies an mehreren Stellen tun müssen.

Alternativ können Sie dies auch mit AJAX tun, aber die Implementierung hängt davon ab, welche Bibliothek Sie verwenden.

5voto

Stephen Wrighton Punkte 34868

Wenn Sie ein Benutzerprofil pflegen, können Sie die Benutzer bitten, Ihnen ihre Zeitzone mitzuteilen, und dann die notwendigen Berechnungen durchführen.

0voto

Keltex Punkte 25852

Die Alternative ist die Geolokalisierung des Nutzers auf der Grundlage seiner IP-Adresse. Oder geolokalisieren, wenn der Browser diese Fähigkeit hat (demnächst für Firefox). Sobald Sie den Standort des Nutzers haben, können Sie die Zeitzone nachschlagen.

Die Javascript-Lösung ist wahrscheinlich eine gute und einfache Lösung.

0voto

JacquesB Punkte 40790

Client und Server sind möglicherweise nicht vollständig synchronisiert, so dass sich die Frage stellt, ob Sie die Zeit auf dem Client-Computer oder die Zeit auf dem Server, aber angepasst an Zeitzonenunterschiede, benötigen. Mit Javascript können Sie die Zeit auf dem Client ermitteln (einschließlich Zeitzone). Sie können auch die Zeit auf dem Server mit der Zeitzone des Clients kombinieren.

Allerdings kann man die Zeit nie genauer bestimmen als die Latenzzeit einer Anfrage.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X