Get timezone abbreviation using offset value

前端 未结 2 1898
逝去的感伤
逝去的感伤 2020-11-28 15:26

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         


        
相关标签:
2条回答
  • 2020-11-28 15:37

    Latest build of moment.js would give you timezone guess: PR#220 for example: moment.tz.guess(); will result in 'America/New_York'

    0 讨论(0)
  • 2020-11-28 15:43

    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')
    
    0 讨论(0)
提交回复
热议问题