Get timezone abbreviation using offset value
Using moment.js (with moment-timezone), I want to get the timezone abbreviation (e.g. PST) for the current locale.
var now = Date.now(); // 1423254073931
var zone = moment(now).zone(); // 480
var timezone =
How do I get the timezone abbreviation? All of the examples I have seen in the docs and elsewhere pick a specific region like "America/New_York"
.
From the docs, it looks like I can get the information out of the Zone Object with zone.abbr(timestamp)
but I'm not sure how to access the zone object.
JSFiddle
Solution 1:
The title and the question are different. In the title, you ask how to get it using the offset - which would not be possible. There are many time zones that share the same offset, so it isn't possible to distinguish a time zone abbreviation from an offset alone.
But in the question, you asked how to get the abbreviation for the current locale, for a specific timestamp.
The general problem is, there is no fully-reliable way to detect the current time zone. This is discussed in this answer. So moment-timezone can't deterministically tell which time zone should be loaded by default.
There are some other options available though.
Current browsers / node
In current browsers, the ECMAScript Internationalization API extensions are supported on the toLocaleString
function of the Date
object. When supported, you can do this:
var d = new Date(); // or whatever date you have
var tzName = d.toLocaleString('en', {timeZoneName:'short'}).split(' ').pop();
In current browsers, you'll get a value like "EST". You might want to do some sort of tests though, because it won't work in all browsers.
Use jsTimeZoneDetect
You could use a script like jsTimeZoneDetect to guess at the local time zone. It's usually correct, but not guaranteed. You could then pass that value to moment-timezone.
var tzName = jstz.determine().name();
var m = moment();
var abbr = m.tz(tzName).zoneAbbr(); // or .format('z')
Use moment-timezone
There is also now built-in support for time zone detection/guessing in moment-timezone:
var tzName = moment.tz.guess();
var abbr = m.tz(tzName).zoneAbbr(); // or .format('z')
Solution 2:
Latest build of moment.js would give you timezone guess:
PR#220
for example: moment.tz.guess(); will result in 'America/New_York'