My workaround at the moment, within a shortcode, is to just copy the WP native code to get the Timezone within my (namespaced) class:

new \DateTimeZone( $this->wp_timezone_string() ));
private function wp_timezone_string() {
    $timezone_string = get_option( 'timezone_string' );

    if ( $timezone_string ) {
        return $timezone_string;

    $offset  = (float) get_option( 'gmt_offset' );
    $hours   = (int) $offset;
    $minutes = ( $offset - $hours );

    $sign      = ( $offset < 0 ) ? '-' : '+';
    $abs_hour  = abs( $hours );
    $abs_mins  = abs( $minutes * 60 );
    $tz_offset = sprintf( '%s%02d:%02d', $sign, $abs_hour, $abs_mins );

    return $tz_offset;

But I'm wondering why I can't just call make a call to \wp_timezone() (escaped for namespace).

Is it because the file that contains that class hasn't loaded yet?

  • Where/when are you trying to use it? Is this inside a theme?
    – Tom J Nowell
    Sep 23 '20 at 18:27
  • No it's within a plugin, called by a shortcode.
    – MikeiLL
    Sep 23 '20 at 19:21
  • and you're using the latest WordPress?
    – Tom J Nowell
    Sep 23 '20 at 21:57
  • 1
    There's the rub! I was developing in v5.2 and these functions are since v5.3.
    – MikeiLL
    Sep 23 '20 at 23:02
  • 1
    Awesome, can you post it as an answer rather than a comment so I can upvote?
    – Tom J Nowell
    Sep 24 '20 at 10:00

Thank you Tom J Nowell for the insightful comment above.

Turns out that wp_timezone is a relatively recent addition to Wordpress, and didn't exist in the version of WP I was developing in. It was added, as the Changelog says, in v5.3. I was using v5.2.

The function itself:

function wp_timezone() {
    return new DateTimeZone( wp_timezone_string() );

Simpy wraps the result of wp_timezone_string in a native php DateTimeZone object. The wp_timezone_string was also added in v5.3.

Since this is a brand new plugin, I'm not going to support older version of Wordpress. For pragmatic reasons, and in solidarity with the movement to encourage users to upgrade WP environments, I have also opted to not support versions of php (like v5.6) that are past their End of Life.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.