/var/www/hkosl.com/aga/wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemap-timezone.php


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
<?php
/**
 * WPSEO plugin file.
 *
 * @package WPSEO\XML_Sitemaps
 */

/**
 * Class WPSEO_Sitemap_Timezone.
 */
class WPSEO_Sitemap_Timezone {

    
/**
     * Holds the timezone string value to reuse for performance.
     *
     * @var string $timezone_string
     */
    
private $timezone_string '';

    
/**
     * Format arbitrary UTC datetime string to desired form in site's time zone.
     *
     * @param string $datetime_string The input datetime string in UTC time zone.
     * @param string $format          Date format to use.
     *
     * @return string
     */
    
public function format_date$datetime_string$format 'c' ) {

        
$date_time $this->get_datetime_with_timezone$datetime_string );

        if ( 
is_null$date_time ) ) {
            return 
'';
        }

        return 
$date_time->format$format );
    }

    
/**
     * Get the datetime object, in site's time zone, if the datetime string was valid
     *
     * @param string $datetime_string The datetime string in UTC time zone, that needs
     *                                to be converted to a DateTime object.
     *
     * @return DateTime|null DateTime object in site's time zone.
     */
    
public function get_datetime_with_timezone$datetime_string ) {

        static 
$utc_timezone$local_timezone;

        if ( ! isset( 
$utc_timezone ) ) {
            
$utc_timezone   = new DateTimeZone'UTC' );
            
$local_timezone = new DateTimeZone$this->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;
        }

        return 
null;
    }

    
/**
     * Returns the timezone string for a site, even if it's set to a UTC offset.
     *
     * Adapted from {@link 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.
        
$timezone get_option'timezone_string' );
        if ( ! empty( 
$timezone ) ) {
            return 
$timezone;
        }

        
// Get UTC offset, if it isn't set then return UTC.
        
$utc_offset = (int) get_option'gmt_offset');
        if ( 
=== $utc_offset ) {
            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 );

        if ( 
false !== $timezone ) {
            return 
$timezone;
        }

        
// Last try, guess timezone string manually.
        
$timezone_list timezone_abbreviations_list();
        foreach ( 
$timezone_list as $abbr ) {
            foreach ( 
$abbr as $city ) {
                if ( 
$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;
    }
}