Sometimes, we need to get the user’s time zone in our JavaScript web app.
In this article, we’ll look at how to get the user’s time zone and offset in JavaScript.
Date.prototype.getTimezoneOffset
JavaScript’s native Date
objects has the getTimezoneOffset
method that returns the user’s time zone.
To use it, we can write:
const offset = new Date().getTimezoneOffset();
console.log(offset);
It returns the difference between UTC and local time.
So we see that offset
is 480 if we’re in the Pacific Standard Time.
The offset is positive when it’s behind UTC and negative otherwise.
The offset is in minutes so we divide it by 60 to get the number of hours.
Daylight saving time prevents this value from being constant.
The Intl.DateTimeFormat Constructor
Also, we can use theIntl.DateTimeFormat().resolvedOptions().timeZone
property to get the user’s time zone.
For instance, if we have:
console.log(Intl.DateTimeFormat().resolvedOptions().timeZone)
Then if we’re in the Pacific Time Zone, we may get something like:
'America/Los_Angeles'
returned.
Extract the Time Zone from the Date String
We can extract the time zone from the string returned from the toString
method from a JavaScript native Date
instance.
For instance, we can write:
const split = new Date().toString().split(" ");
const timeZone = split.slice(-3).join(' ')
console.log(timeZone)
And timeZone
should be ‘(Pacific Standard Time)’
if we’re in the Pacific Standard Time time zone.
We split the date string returned from toString
by a space with split
.
Then we call slice
with -3 to get the last 3 parts of the string.
And we join them together with join
.
To make the extract easier, we can use a regex object.
For instance, we can write:
const [timeZone] = new Date().toString().match(/([A-Z]+[+-][0-9]+.*)/)
console.log(timeZone)
to get the part of the date string with the upper case letters, plus or minus sign, the digits, and the time zone name together.
We call match
on it to get the match.
It returns an object, so we can destructure the result and assign it to timeZone
.
And so timeZone
is:
'GMT-0800 (Pacific Standard Time)'
We can extract the letters and digits part only by writing:
const [timeZone] = new Date().toString().match(/([A-Z]+[+-][0-9]+)/)
console.log(timeZone)
And we get 'GMT-0800'
for timeZone
.
We can extract the text in parentheses with:
const [timeZone] = new Date().toString().match(/(([A-Za-zs].*))/)
console.log(timeZone)
And timeZone
would be ‘(Pacific Standard Time)‘
.
Also, we can extract the hours’ difference from UTC by writing:
const [timeZone] = new Date().toString().match(/([-+][0-9]+)s/)
console.log(timeZone)
And we get '-0800'
if we’re in the Pacific Standard Time time zone.
Conclusion
We can get the user’s time zone in multiple ways with JavaScript.
We can extract the items from a date string or we can use a library to built-in methods to extract them.