34

Can I get the name of the time zone of the client by using jQuery?

Example: Pacific S.A. Standard Time, Greenwich Standard Time, like this: https://en.wikipedia.org/wiki/List_of_time_zones_by_country

Timezonelist

Digital Alchemist
  • 2,246
  • 1
  • 12
  • 17
Nathan Nguyễn
  • 517
  • 1
  • 5
  • 15
  • 4
    The output of `new Date()` is `Wed Aug 14 2013 22:02:13 GMT-0700 (Pacific Daylight Time)`, can you use that? – Juan Mendes Aug 15 '13 at 05:02
  • There's no native JS/jQuery function that does this. One way of doing this is to combine JS (AJAX) with server side code, such as PHP. Look at the top answer in [this](http://stackoverflow.com/questions/8090549/how-to-get-user-timezone-using-jquery) thread. It combines JS and PHP and does what you want. – Itay Aug 15 '13 at 05:16
  • @ItayItai You don't think my answer satisfies the requirement? It's the same name from the list the OP gave – Juan Mendes Aug 15 '13 at 05:19
  • @Juan Mendes: You're right, but I was explaining the idea of using AJAX for this mission. He can be more flexible with the server side code (assuming he needs something more specific than your answer) – Itay Aug 15 '13 at 05:26
  • @Juan Mendes In Safari on Mac , it not Wed Aug 14 2013 22:02:13 GMT-0700 (Pacific Daylight Time), it like Wed Aug 14 2013 22:02:13 GMT-0700 (PCI). Not my anwser i need, I need get Timezone Name like Pacific S.A. Standard Time, Greenwich Standard Time . thank you for response – Nathan Nguyễn Aug 15 '13 at 05:48
  • @NathanNguyễn There is enough information through the comments and answer for you to solve your problem, you should post what you come up with. – Juan Mendes Aug 15 '13 at 15:31
  • possible duplicate of [JavaScript timezone information how to get America/Los\_Angeles (or equivalent)](http://stackoverflow.com/questions/22618056/javascript-timezone-information-how-to-get-america-los-angeles-or-equivalent) – Matt Johnson-Pint May 08 '14 at 16:32
  • @NathanNguyễn see this plugin it will give you timezone name and many more http://kevalbhatt.github.io/WorldMapGenerator/ – Keval Bhatt Dec 15 '15 at 06:03

13 Answers13

49

Can I get the name of the time zone of the client by using jQuery?

No. jQuery has only one date/time function, which is $.now().

If you meant JavaScript, the answer is still no. You can only obtain a time zone offset from date.getTimezoneOffset(). You can't get a time zone - at least not in all browsers. Refer to the timezone tag wiki's section titled: "Time Zone != Offset"

You can guess at the time zone, by using the jsTimeZoneDetect library, but it is just a guess. It may or may not be accurate.

You can also now use moment.js with the moment-timezone add on. It now supports time zone guessing with moment.tz.guess().

If you can guarantee your users are running in an environment that fully supports the ECMAScript Internationalization API, you can get the user's time zone like this:

Intl.DateTimeFormat().resolvedOptions().timeZone

You can review the compatibility table, under DateTimeFormat - resolvedOptions().timezone defaults to the host environment to determine which environments this will work in.

Honestly, the best thing to do is to just give your user a screen somewhere that they can select their timezone. You might use a drop-down list, or you might use a map-based timezone picker - like this one. You can use jsTimeZoneDetect as a default value, but your user should be able to change it.

Also, all of these are going to give you an IANA time zone identifier, such as America/Los_Angeles. But the examples you gave appear to be Windows time zone ids (for use with TimeZoneInfo in .net). You should read the timezone tag wiki, and then also this question: How to translate between Windows and IANA time zones?

Matt Johnson-Pint
  • 197,368
  • 66
  • 382
  • 508
16

The output of new Date() is Wed Aug 14 2013 22:02:13 GMT-0700 (Pacific Daylight Time), can you use that? If you don't need the official name, you can just use what's in between the parentheses

function getTimeZone() {
    return /\((.*)\)/.exec(new Date().toString())[1];
}

getTimeZone(); // Pacific Daylight Time 
Juan Mendes
  • 80,964
  • 26
  • 138
  • 189
  • 1
    In Safari on Mac , it not Wed Aug 14 2013 22:02:13 GMT-0700 (Pacific Daylight Time), it like Wed Aug 14 2013 22:02:13 GMT-0700 (PCI). Not my anwser i need, I need get Timezone Name like Pacific S.A. Standard Time, Greenwich Standard Time . thank you for response – Nathan Nguyễn Aug 15 '13 at 05:49
  • 4
    @Juan - That response is going to be highly browser, language, and OS specific. – Matt Johnson-Pint Aug 15 '13 at 11:49
  • @MattJohnson Which may be a good thing if you're used to seeing your time zone in your own OS, browser and language :) and you don't have a need for official time zone names. – Juan Mendes Sep 08 '17 at 11:40
14

As an alternative below is the way to get timezone with pure javascript:

(new Date).toString().split('(')[1].slice(0, -1)
Andriy Ivaneyko
  • 15,838
  • 3
  • 43
  • 65
8

Get the current timezone standard name:

function getTimezoneName() {
    var timeSummer = new Date(Date.UTC(2005, 6, 30, 0, 0, 0, 0));
    var summerOffset = -1 * timeSummer.getTimezoneOffset();
    var timeWinter = new Date(Date.UTC(2005, 12, 30, 0, 0, 0, 0));
    var winterOffset = -1 * timeWinter.getTimezoneOffset();
    var timeZoneHiddenField;

    if (-720 == summerOffset && -720 == winterOffset) { timeZoneHiddenField = 'Dateline Standard Time'; }
    else if (-660 == summerOffset && -660 == winterOffset) { timeZoneHiddenField = 'UTC-11'; }
    else if (-660 == summerOffset && -660 == winterOffset) { timeZoneHiddenField = 'Samoa Standard Time'; }
    else if (-660 == summerOffset && -600 == winterOffset) { timeZoneHiddenField = 'Hawaiian Standard Time'; }
    else if (-570 == summerOffset && -570 == winterOffset) { timeZoneHiddenField.value = 'Pacific/Marquesas'; }
    //                else if (-540 == summerOffset && -600 == winterOffset) { timeZoneHiddenField.value = 'America/Adak'; }
    //                else if (-540 == summerOffset && -540 == winterOffset) { timeZoneHiddenField.value = 'Pacific/Gambier'; }
    else if (-480 == summerOffset && -540 == winterOffset) { timeZoneHiddenField = 'Alaskan Standard Time'; }
    //                else if (-480 == summerOffset && -480 == winterOffset) { timeZoneHiddenField = 'Pacific/Pitcairn'; }
    else if (-420 == summerOffset && -480 == winterOffset) { timeZoneHiddenField = 'Pacific Standard Time'; }
    else if (-420 == summerOffset && -420 == winterOffset) { timeZoneHiddenField = 'US Mountain Standard Time'; }
    else if (-360 == summerOffset && -420 == winterOffset) { timeZoneHiddenField = 'Mountain Standard Time'; }
    else if (-360 == summerOffset && -360 == winterOffset) { timeZoneHiddenField = 'Central America Standard Time'; }
    //                else if (-360 == summerOffset && -300 == winterOffset) { timeZoneHiddenField = 'Pacific/Easter'; }
    else if (-300 == summerOffset && -360 == winterOffset) { timeZoneHiddenField = 'Central Standard Time'; }
    else if (-300 == summerOffset && -300 == winterOffset) { timeZoneHiddenField = 'SA Pacific Standard Time'; }
    else if (-240 == summerOffset && -300 == winterOffset) { timeZoneHiddenField = 'Eastern Standard Time'; }
    else if (-270 == summerOffset && -270 == winterOffset) { timeZoneHiddenField = 'Venezuela Standard Time'; }
    else if (-240 == summerOffset && -240 == winterOffset) { timeZoneHiddenField = 'SA Western Standard Time'; }
    else if (-240 == summerOffset && -180 == winterOffset) { timeZoneHiddenField = 'Central Brazilian Standard Time'; }
    else if (-180 == summerOffset && -240 == winterOffset) { timeZoneHiddenField = 'Atlantic Standard Time'; }
    else if (-180 == summerOffset && -180 == winterOffset) { timeZoneHiddenField = 'Montevideo Standard Time'; }
    else if (-180 == summerOffset && -120 == winterOffset) { timeZoneHiddenField = 'E. South America Standard Time'; }
    else if (-150 == summerOffset && -210 == winterOffset) { timeZoneHiddenField = 'Mid-Atlantic Standard Time'; }
    else if (-120 == summerOffset && -180 == winterOffset) { timeZoneHiddenField = 'America/Godthab'; }
    else if (-120 == summerOffset && -120 == winterOffset) { timeZoneHiddenField = 'SA Eastern Standard Time'; }
    else if (-60 == summerOffset && -60 == winterOffset) { timeZoneHiddenField = 'Cape Verde Standard Time'; }
    else if (0 == summerOffset && -60 == winterOffset) { timeZoneHiddenField = 'Azores Daylight Time'; }
    else if (0 == summerOffset && 0 == winterOffset) { timeZoneHiddenField = 'Morocco Standard Time'; }
    else if (60 == summerOffset && 0 == winterOffset) { timeZoneHiddenField = 'GMT Standard Time'; }
    else if (60 == summerOffset && 60 == winterOffset) { timeZoneHiddenField = 'Africa/Algiers'; }
    else if (60 == summerOffset && 120 == winterOffset) { timeZoneHiddenField = 'Namibia Standard Time'; }
    else if (120 == summerOffset && 60 == winterOffset) { timeZoneHiddenField = 'Central European Standard Time'; }
    else if (120 == summerOffset && 120 == winterOffset) { timeZoneHiddenField = 'South Africa Standard Time'; }
    else if (180 == summerOffset && 120 == winterOffset) { timeZoneHiddenField = 'GTB Standard Time'; }
    else if (180 == summerOffset && 180 == winterOffset) { timeZoneHiddenField = 'E. Africa Standard Time'; }
    else if (240 == summerOffset && 180 == winterOffset) { timeZoneHiddenField = 'Russian Standard Time'; }
    else if (240 == summerOffset && 240 == winterOffset) { timeZoneHiddenField = 'Arabian Standard Time'; }
    else if (270 == summerOffset && 210 == winterOffset) { timeZoneHiddenField = 'Iran Standard Time'; }
    else if (270 == summerOffset && 270 == winterOffset) { timeZoneHiddenField = 'Afghanistan Standard Time'; }
    else if (300 == summerOffset && 240 == winterOffset) { timeZoneHiddenField = 'Pakistan Standard Time'; }
    else if (300 == summerOffset && 300 == winterOffset) { timeZoneHiddenField = 'West Asia Standard Time'; }
    else if (330 == summerOffset && 330 == winterOffset) { timeZoneHiddenField = 'India Standard Time'; }
    else if (345 == summerOffset && 345 == winterOffset) { timeZoneHiddenField = 'Nepal Standard Time'; }
    else if (360 == summerOffset && 300 == winterOffset) { timeZoneHiddenField = 'N. Central Asia Standard Time'; }
    else if (360 == summerOffset && 360 == winterOffset) { timeZoneHiddenField = 'Central Asia Standard Time'; }
    else if (390 == summerOffset && 390 == winterOffset) { timeZoneHiddenField = 'Myanmar Standard Time'; }
    else if (420 == summerOffset && 360 == winterOffset) { timeZoneHiddenField = 'North Asia Standard Time'; }
    else if (420 == summerOffset && 420 == winterOffset) { timeZoneHiddenField = 'SE Asia Standard Time'; }
    else if (480 == summerOffset && 420 == winterOffset) { timeZoneHiddenField = 'North Asia East Standard Time'; }
    else if (480 == summerOffset && 480 == winterOffset) { timeZoneHiddenField = 'China Standard Time'; }
    else if (540 == summerOffset && 480 == winterOffset) { timeZoneHiddenField = 'Yakutsk Standard Time'; }
    else if (540 == summerOffset && 540 == winterOffset) { timeZoneHiddenField = 'Tokyo Standard Time'; }
    else if (570 == summerOffset && 570 == winterOffset) { timeZoneHiddenField = 'Cen. Australia Standard Time'; }
    else if (570 == summerOffset && 630 == winterOffset) { timeZoneHiddenField = 'Australia/Adelaide'; }
    else if (600 == summerOffset && 540 == winterOffset) { timeZoneHiddenField = 'Asia/Yakutsk'; }
    else if (600 == summerOffset && 600 == winterOffset) { timeZoneHiddenField = 'E. Australia Standard Time'; }
    else if (600 == summerOffset && 660 == winterOffset) { timeZoneHiddenField = 'AUS Eastern Standard Time'; }
    else if (630 == summerOffset && 660 == winterOffset) { timeZoneHiddenField = 'Australia/Lord_Howe'; }
    else if (660 == summerOffset && 600 == winterOffset) { timeZoneHiddenField = 'Tasmania Standard Time'; }
    else if (660 == summerOffset && 660 == winterOffset) { timeZoneHiddenField = 'West Pacific Standard Time'; }
    else if (690 == summerOffset && 690 == winterOffset) { timeZoneHiddenField = 'Central Pacific Standard Time'; }
    else if (720 == summerOffset && 660 == winterOffset) { timeZoneHiddenField = 'Magadan Standard Time'; }
    else if (720 == summerOffset && 720 == winterOffset) { timeZoneHiddenField = 'Fiji Standard Time'; }
    else if (720 == summerOffset && 780 == winterOffset) { timeZoneHiddenField = 'New Zealand Standard Time'; }
    else if (765 == summerOffset && 825 == winterOffset) { timeZoneHiddenField = 'Pacific/Chatham'; }
    else if (780 == summerOffset && 780 == winterOffset) { timeZoneHiddenField = 'Tonga Standard Time'; }
    else if (840 == summerOffset && 840 == winterOffset) { timeZoneHiddenField = 'Pacific/Kiritimati'; }
    else { timeZoneHiddenField = 'US/Pacific'; }
    return timeZoneHiddenField;
}
admdrew
  • 3,600
  • 4
  • 22
  • 39
user3119287
  • 189
  • 1
  • 5
5

Found this script I am using with moment.js:

http://pellepim.bitbucket.org/jstz/

This script allows to get the name of the timezone of the browser, like in this exemple:

> var timezone = jstz.determine();
> timezone.name(); 
"America/New_York"

It is not in jQuery, however...

Josyan
  • 59
  • 2
  • 4
  • Welcome to StackOverflow! Posting just a link, without an associated code sample, is not terribly helpful. Please try to avoid posting just links without further information. – Joe McBride Jan 21 '15 at 16:05
  • Unfortunately this library is not up to date, so some timezones can be detected incorrectly. – Nikolai Golub Apr 22 '15 at 11:58
2

In pure javascript using regular expression,

var d = new Date();
var s = d.toString();
var zoneName = s.match(".*(\\((.*)\\))")[2];
Rakesh Chaudhari
  • 2,420
  • 1
  • 21
  • 22
1

Can't think of any way to do it using Jquery. You can get the remote user country name using PHP and then compare the output to:

1) an array of countries that apply light saving time (not many).

2) current date.

To get the users country:

function visitor_country() {
    $ip = $_SERVER["REMOTE_ADDR"];
    if(filter_var(@$_SERVER['HTTP_X_FORWARDED_FOR'], FILTER_VALIDATE_IP))
            $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
    if(filter_var(@$_SERVER['HTTP_CLIENT_IP'], FILTER_VALIDATE_IP))
            $ip = $_SERVER['HTTP_CLIENT_IP'];
    $result = @json_decode(file_get_contents("http://www.geoplugin.net/json.gp?ip=" . $ip))
            ->geoplugin_countryName;
    return $result <> NULL ? $result : "Unknown";
}
echo visitor_country(); // Output Country name [Ex: United States]
?>

This world Time Zones map link can be used to create the array: http://www.worldtimezone.com/daylight.html

Hope this idea works for you!

Kareem
  • 4,110
  • 37
  • 34
0

These Links might help you out timeZone using Jquery

or following code might help u out

var offset = (new Date()).getTimezoneOffset();
alert(offset);

checkout JSFIddle implementation or for further explanation please visit Solution by Scott

For Only Time Zone

function get_time_zone_offset( ) {
    var current_date = new Date();
  alert(current_date);   
  //return -current_date.getTimezoneOffset() / 60;

}

The alert popup will display Timezone as well, which you can re-factor as per your requirement, check it out in JS Fiddle

Community
  • 1
  • 1
Digital Alchemist
  • 2,246
  • 1
  • 12
  • 17
0

using moment.js + moment-timezones.js

moment.tz.guess();

https://github.com/moment/moment-timezone/issues/138

ncubica
  • 7,276
  • 7
  • 50
  • 67
0

This site has some nice examples

https://www.geeksforgeeks.org/javascript-date-now/

// Use of Date.now() function 
var d = Date(Date.now()); 

// Converting the number of millisecond in date string 
a = d.toString() 

// Printing the current date                     
document.write("The current date is: " + a)  
camille
  • 13,812
  • 10
  • 29
  • 45
0

console.log(Intl.DateTimeFormat().resolvedOptions().timeZone);
Intl.DateTimeFormat().resolvedOptions().timeZone
Ahsan Khan
  • 209
  • 3
  • 11
-1

I know this question is old, but here's a little solution I came up with:

(new Date).toLocaleString('en-US', {
    hour12: false,
    hour: '2-digit',
    timeZoneName: 'long'
}).replace(/^\d\d /, '');

I haven't tested this widely, but for my browser this gives me:

"Mountain Daylight Time"

Hope this helps somebody out there.

ChaseMoskal
  • 5,623
  • 5
  • 31
  • 41
  • @Gujamin: Sadly, you're right. It looks like Safari completely ignores the provided options object, which Chrome and other courteous browsers politely regard. Does anybody know a concise cross-platform way to obtain the timezone in long string format? – ChaseMoskal Apr 06 '15 at 19:01
  • I ended up just using user3119287's answer. Not ideal but it worked. – Gujamin Apr 06 '15 at 19:04
  • 1
    Not working even in IE. It does not give the timezone name – Deepika Jun 29 '15 at 13:39
-1

There is no direct way, but you can do this :

var dd = new Date(); var d = dd.toString();

var startOff= d.indexOf('(') + 1; var endOff= d.lastIndexOf(')');

var str = d.substring(startOff , endOff);

I have created a JS fiddle, where you see with alerts : JSFiddle

var dd = new Date();
var d = dd.toString();

alert(d);
var startOff= d.indexOf('(') + 1;
alert(startOff);
var endOff= d.lastIndexOf(')');
alert(startOff+ "  : " + endOff);

var str = d.substring(startOff , endOff);
alert(str);