How to get WordPress Time Zone setting?

1 Votes

Can someone tell me how to get the time zone that is set in the WordPress Admin?

For example, if the blog is set to Eastern time, I need this exact string to print out:


This is for a function that lives in functions.php in my theme.



  1. + -1 -

    The unfortunate situation is that there are indeed two different options:

    1. Newer timezone_string, which saves PHP–style time zone.
    2. Older gmt_offset, which saves numeric float offset in hours.

    But in newer environments timezone_string actually overrides gmt_offset, the value returned by latter will be based on the former. However opposite isn’t true — gmt_offset might be valid, while timezone_string is empty.

    I’ve spend quite a bit time on these things, and the most current take I implemented in my WpDateTime library is following:

    class WpDateTimeZone extends DateTimeZone {
         * Determine time zone from WordPress options and return as object.
         * @return self
        public static function getWpTimezone() {
            $timezone_string = get_option( 'timezone_string' );
            if ( ! empty( $timezone_string ) ) {
                return new self( $timezone_string );
            $offset  = get_option( 'gmt_offset' );
            $hours   = (int) $offset;
            $minutes = ( $offset - floor( $offset ) ) * 60;
            $offset  = sprintf( '%+03d:%02d', $hours, $minutes );
            return new self( $offset );

    This will try to instance meaningful time zone object in all possible cases, as long as any information at all is available.

  2. + 1 -

    There are a few options, none of which really work great. This is a WordPress bug, and it genuinely sucks because the time is wrong unless you set your site to UTC… which is confusing and not always even possible.

    This next code I think only works if you choose your Timezone (Under Settings -> General in admin) as a named city instead of by an GMT number offset. I haven’t tested this but it’s very possible that get_option('gmt_offset') is set when get_option('timezone_string') is not.


    The downside of this is that WordPress assumes PHP is set to UTC when making mysql timestamps, so you can mess up your database a little bit whenever you switch timezones! Not to mention other WP plugins may assume that the PHP environment is always in UTC.

    So, if you just want a correct time — you can force your timestamp to be in UTC with:

    get_post_time('c', true); //should work for non-post objects.

    Unfortunately, although correct, it’ll make the timezone get set to UTC.

    And note that you can’t both use the “true” flag and the default timezone_set function.

    Any proper solution is gonna be a code-snippet that accounts for both gmt_offset AND timezone_string and uses them to set a timezone on some input. WP assumes that PHP set to UTC when doing mysql timestamps, and it might break other plugins.

    There’s one such solution on but, again this is a BUG, so you should use the get_post_time($date_format, TRUE) code to get a timestamp that is actually correct.

  3. + -

    Don’t think you’re gonna get a string like US/Eastern without storing all the strings you want in an array and referring to them. Using PHP you can get the timezone abbreviation, ie EST; and if you have those values stored in an array with the strings you want, you can look them up.

    <?php date_default_timezone_set(get_option('timezone_string'));
          echo date('T'); // will give you three-character string like "EST"
          $timezones = array (
              'EST' => 'US/Eastern',
              'CST' => 'US/Central',
              // etc, etc, etc.
          echo $timezones [ date('T') ]; // should be what you want.
  4. + -

    To add to Bainternet (I am adding this as an answer because I cannot comment — I have less than 50 points on WP Development stack).

    WordPress will only store a timezone string if you select a timezone string in the general settings. UTF selection is where it defaults in the list, but you can scroll way up to timezone strings. If you set a timezone string, both the UTF and the Timezone string will be set. They will be the same (meaning, the UTF gets reset to the new zone when you select a timezone string timezone).

    (WordPress 4)

  5. + -

    if you need the gmt_offset then

    <?php echo get_option('gmt_offset'); ?>

    this will give you an integer like 2 or -2.

    and if you need the timezone string use

    <?php echo get_option('timezone_string'); ?>

    this will give you a string like America/Indianapolis

  6. + -

    Check the Option Reference page. The option gmt_offset returns an integer. For example, if the timezone is set to Easter time, gmt_offset should be -5.

Please signup or login to answer this question.