fix conflicts
authorleon <leon@roojs.com>
Fri, 27 Oct 2023 07:34:19 +0000 (15:34 +0800)
committerleon <leon@roojs.com>
Fri, 27 Oct 2023 07:34:19 +0000 (15:34 +0800)
1  2 
TimeZone.php

diff --combined TimeZone.php
@@@ -76,6 -76,10 +76,12 @@@ class Pman_Core_TimeZone extends Pma
                  *, TIME_FORMAT(TIMEDIFF(NOW(), CONVERT_TZ(NOW(), Name, 'UTC')), '%H:%i') as timeOffset
              FROM
                  mysql.time_zone_name
 -                NAME NOT LIKE 'Etc%'
+             WHERE
+                 Name LIKE '%/%'
+                 AND
++                LENGTH(Name) - LENGTH(REPLACE(Name, '/', '')) = 1
++                AND
++                Name NOT LIKE 'Etc%'
              ORDER BY
                  timeoffset DESC,
                  Name DESC
  
          while($ce->fetch()) {
              // ignroe timezone such as 'CET' and 'America/Argentina/Buenos_Aires'
-             if(substr_count($ce->Name, '/') != 1) {
-                 continue;
-             }
+            
  
              $ar = explode('/', $ce->Name);
              // ignore timezone such as 'Etc/GMT+8'
-             if($ar[0] == 'Etc') {
-                 continue;
-             }
+            
  
              $displayArea = str_replace('_', ' ', $ar[1]);
  
                  'region' => $ar[0],
                  'area' => $ar[1],
                  'displayName' => $ar[0] . '/' . $displayArea . ' ' . $displayOffset,
 -                'displayArea' => $displayArea . ' ' . $displayOffset,
 -                'timeOffset' => $timeOffset
 +                'displayArea' => $displayArea . ' ' . $displayOffset
              );
          }
  
          return self::$timezones;
      }
  
 +    static function isValidTimeZone($tz) {
 +        try {
 +            new DateTimeZone($tz);
 +        }
 +        catch (Exception $e) {
 +            return false;
 +        }
 +
 +        return true;
 +    }
 +
 +    static function toRegion($tz)
 +    {
 +        if(!self::isValidTimeZone($tz)) {
 +            return '';
 +        }
 +        
 +        return explode('/', $tz)[0];
 +    }
 +
 +    static function toArea($tz)
 +    {
 +        if(!self::isValidTimeZone($tz)) {
 +            return '';
 +        }
 +
 +        return explode('/', $tz)[1];
 +    }
      
 +    static function toTimeOffset($dt, $tz)
 +    {
 +        if(!self::isValidTimeZone($tz)) {
 +            return '';
 +        }
 +
 +        $date = new DateTime($dt, new DateTimeZone($tz));
 +        return $date->format('P');
 +    }
 +
 +    static function toDisplayArea($dt, $tz)
 +    {
 +        return str_replace('_', ' ', self::toArea($tz)) . ' (GMT ' . self::toTimeOffset($dt,$tz) . ')';
 +
 +    }
 +
 +    static function toDisplayName($dt, $tz)
 +    {
 +        return self::toRegion($tz) . '/' . self::toDisplayArea($dt, $tz);
 +    }
  }