get_timezone_string() ); } if ( ! empty( $datetime_string ) && WPSEO_Utils::is_valid_datetime( $datetime_string ) ) { $datetime = new DateTime( $datetime_string, $utc_timezone ); $datetime->setTimezone( $local_timezone ); return $datetime->format( $format ); } return null; } /** * Returns the timezone string for a site, even if it's set to a UTC offset * * Adapted from http://www.php.net/manual/en/function.timezone-name-from-abbr.php#89155 * * @return string valid PHP timezone string */ private function determine_timezone_string() { // If site timezone string exists, return it. if ( $timezone = get_option( 'timezone_string' ) ) { return $timezone; } // Get UTC offset, if it isn't set then return UTC. if ( 0 === ( $utc_offset = get_option( 'gmt_offset', 0 ) ) ) { return 'UTC'; } // Adjust UTC offset from hours to seconds. $utc_offset *= HOUR_IN_SECONDS; // Attempt to guess the timezone string from the UTC offset. $timezone = timezone_name_from_abbr( '', $utc_offset ); // Last try, guess timezone string manually. if ( false === $timezone ) { $is_dst = date( 'I' ); foreach ( timezone_abbreviations_list() as $abbr ) { foreach ( $abbr as $city ) { if ( $city['dst'] == $is_dst && $city['offset'] == $utc_offset ) { return $city['timezone_id']; } } } } // Fallback to UTC. return 'UTC'; } /** * Returns the correct timezone string * * @return string */ private function get_timezone_string() { if ( '' == $this->timezone_string ) { $this->timezone_string = $this->determine_timezone_string(); } return $this->timezone_string; } }