How to get client date and time in ASP.NET?


Question

When I use DateTime.Now I get the date and time from the server point of view. Is there any way to get the client date and time in ASP.NET?

1
24
2/21/2018 3:40:40 PM

Accepted Answer

What I'd do is create a hidden input field and then wire a Javascript routine to the onsubmit event for the form. This routine would populate the hidden field with the time on the client machine.

The hidden field can used with ASP.NET by using the HTML control "HtmlInputHidden" class. You just give you input control a runat="server" attribute like any other server side control.

The server can then read out this time when the form posts back. You could even wrap this up in a server control if you need to do this in a number of places.

Alternatively, you could do this with AJAX but the implementation will depend on which library you use.

11
11/8/2008 4:11:07 PM

I like the idea of either using the browser/system time and time zone or letting them select their time zone. In a past project I used something like this:

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

And then on the 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;
}

Or you can pass it in as a URL parameter and handle it in the Page_Load:

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

Just remember to use minutes, since not all time zones are whole hours.


Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow
Icon