How to Detect User Timezone in JavaScript?

Detecting the user's timezone in JavaScript is essential for creating applications that display accurate local time information. JavaScript provides multiple methods to determine the user's timezone, from getting the timezone name to calculating the offset from UTC.

Syntax

Following is the syntax for detecting timezone using the Internationalization API

Intl.DateTimeFormat().resolvedOptions().timeZone

Following is the syntax for getting timezone offset using the Date object

new Date().getTimezoneOffset()

Using Intl.DateTimeFormat() for Timezone Name

The Internationalization API provides the most reliable way to detect the user's timezone with its actual name. The Intl.DateTimeFormat().resolvedOptions().timeZone method returns the IANA timezone identifier such as "America/New_York" or "Asia/Kolkata".

Example

Following example demonstrates how to get the exact timezone name using the Internationalization API

<!DOCTYPE html>
<html>
<head>
   <title>Detect User Timezone Name</title>
</head>
<body style="font-family: Arial, sans-serif; padding: 20px;">
   <h1>User Timezone Detection</h1>
   <p><strong>Your Timezone:</strong> <span id="timezone-name"></span></p>
   <p><strong>Current Local Time:</strong> <span id="local-time"></span></p>
   
   <script>
      // Get timezone name
      const timezoneName = Intl.DateTimeFormat().resolvedOptions().timeZone;
      document.getElementById("timezone-name").innerHTML = timezoneName;
      
      // Display current local time
      const currentTime = new Date().toLocaleString();
      document.getElementById("local-time").innerHTML = currentTime;
   </script>
</body>
</html>

The output will display the user's timezone name and current local time

User Timezone Detection
Your Timezone: America/New_York
Current Local Time: 12/15/2023, 2:30:45 PM

Using getTimezoneOffset() for UTC Offset

The getTimezoneOffset() method returns the time difference between UTC time and local time in minutes. A positive value indicates the local timezone is behind UTC, while a negative value means it's ahead of UTC.

Example

Following example shows how to get the timezone offset and convert it to hours

<!DOCTYPE html>
<html>
<head>
   <title>Timezone Offset Detection</title>
</head>
<body style="font-family: Arial, sans-serif; padding: 20px;">
   <h1>Timezone Offset Information</h1>
   <p><strong>UTC Offset (minutes):</strong> <span id="offset-minutes"></span></p>
   <p><strong>UTC Offset (hours):</strong> <span id="offset-hours"></span></p>
   <p><strong>UTC Time:</strong> <span id="utc-time"></span></p>
   <p><strong>Local Time:</strong> <span id="local-time"></span></p>
   
   <script>
      const now = new Date();
      const offsetMinutes = now.getTimezoneOffset();
      const offsetHours = offsetMinutes / 60;
      
      // Display offset information
      document.getElementById("offset-minutes").innerHTML = offsetMinutes;
      document.getElementById("offset-hours").innerHTML = offsetHours > 0 ? 
         "UTC-" + offsetHours : "UTC+" + Math.abs(offsetHours);
      
      // Display UTC and local times
      document.getElementById("utc-time").innerHTML = now.toUTCString();
      document.getElementById("local-time").innerHTML = now.toLocaleString();
   </script>
</body>
</html>

The output shows the timezone offset in both minutes and hours, along with UTC and local times

Timezone Offset Information
UTC Offset (minutes): 300
UTC Offset (hours): UTC-5
UTC Time: Fri, 15 Dec 2023 19:30:45 GMT
Local Time: 12/15/2023, 2:30:45 PM

Complete Timezone Detection Function

The following example combines both methods to create a comprehensive timezone detection function that provides complete timezone information.

Example

<!DOCTYPE html>
<html>
<head>
   <title>Complete Timezone Detection</title>
</head>
<body style="font-family: Arial, sans-serif; padding: 20px;">
   <h1>Complete Timezone Information</h1>
   <button onclick="detectTimezone()">Detect My Timezone</button>
   <div id="timezone-info" style="margin-top: 20px; padding: 15px; background: #f5f5f5; border-radius: 5px;"></div>
   
   <script>
      function detectTimezone() {
         const now = new Date();
         
         // Get timezone name using Intl API
         const timezoneName = Intl.DateTimeFormat().resolvedOptions().timeZone;
         
         // Get timezone offset
         const offsetMinutes = now.getTimezoneOffset();
         const offsetHours = offsetMinutes / 60;
         const offsetString = offsetHours > 0 ? 
            "UTC-" + offsetHours : "UTC+" + Math.abs(offsetHours);
         
         // Get locale information
         const locale = Intl.DateTimeFormat().resolvedOptions().locale;
         
         // Display all information
         const info = `
            <h3>Your Timezone Details:</h3>
            <p><strong>Timezone Name:</strong> ${timezoneName}</p>
            <p><strong>UTC Offset:</strong> ${offsetString}</p>
            <p><strong>Offset in Minutes:</strong> ${offsetMinutes}</p>
            <p><strong>Locale:</strong> ${locale}</p>
            <p><strong>Current Local Time:</strong> ${now.toLocaleString()}</p>
            <p><strong>Current UTC Time:</strong> ${now.toUTCString()}</p>
         `;
         
         document.getElementById("timezone-info").innerHTML = info;
      }
   </script>
</body>
</html>

When the button is clicked, it displays comprehensive timezone information including the timezone name, UTC offset, and current times

Complete Timezone Information
[Detect My Timezone]

Your Timezone Details:
Timezone Name: America/New_York
UTC Offset: UTC-5
Offset in Minutes: 300
Locale: en-US
Current Local Time: 12/15/2023, 2:30:45 PM
Current UTC Time: Fri, 15 Dec 2023 19:30:45 GMT
JavaScript Timezone Detection Methods Intl.DateTimeFormat() Returns: Timezone name Example: "America/New_York" Format: IANA identifier Best for: User display Browser support: Modern getTimezoneOffset() Returns: Minutes from UTC Example: 300 (UTC-5) Format: Numeric offset Best for: Time calculations Browser support: Universal

Key Differences Between Methods

Following table compares the two main methods for detecting user timezone

Method Return Type Example Output Browser Support Best Use Case
Intl.DateTimeFormat().resolvedOptions().timeZone String (IANA timezone name) "America/New_York" Modern browsers (ES6+) Displaying timezone name to users
getTimezoneOffset() Number (minutes from UTC) 300 (for UTC-5) All browsers Time calculations and conversions

Browser Compatibility

The getTimezoneOffset() method has universal browser support, while Intl.DateTimeFormat() requires modern browsers that support ES6 Internationalization API. For maximum compatibility, you can use both methods with a fallback approach.

Conclusion

JavaScript offers two primary methods for timezone detection: Intl.DateTimeFormat().resolvedOptions().timeZone for getting the timezone name and getTimezoneOffset() for calculating the UTC offset. The Internationalization API provides more user-friendly timezone names, while getTimezoneOffset() offers broader browser compatibility and is ideal for time calculations.

Updated on: 2026-03-16T21:38:54+05:30

49K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements