| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 | 
							- <?php
 - 
 - namespace App\Utilities\Localization;
 - 
 - use App\Enums\Setting\TimeFormat;
 - use App\Models\Setting\Localization;
 - use DateTimeZone;
 - use IntlTimeZone;
 - use Symfony\Component\Intl\Timezones;
 - 
 - class Timezone
 - {
 -     public static function getTimezoneOptions(?string $countryCode = null): array
 -     {
 -         if (empty($countryCode)) {
 -             return [];
 -         }
 - 
 -         $countryTimezones = self::getTimezonesForCountry($countryCode);
 - 
 -         if (empty($countryTimezones)) {
 -             return [];
 -         }
 - 
 -         $localizedTimezoneNames = Timezones::getNames();
 - 
 -         $results = [];
 - 
 -         foreach ($countryTimezones as $timezoneIdentifier) {
 -             $timezoneConical = IntlTimeZone::getCanonicalID($timezoneIdentifier);
 -             $translatedName = $localizedTimezoneNames[$timezoneConical] ?? $timezoneConical;
 -             $cityName = self::extractCityName($translatedName);
 -             $localTime = self::getLocalTime($timezoneIdentifier);
 -             $timezoneAbbreviation = now($timezoneIdentifier)->format('T');
 - 
 -             $results[$timezoneIdentifier] = "{$cityName} ({$timezoneAbbreviation}) {$localTime}";
 -         }
 - 
 -         return $results;
 -     }
 - 
 -     public static function extractCityName(string $translatedName): string
 -     {
 -         if (preg_match('/\((.*?)\)/', $translatedName, $match)) {
 -             return trim($match[1]);
 -         }
 - 
 -         return $translatedName;
 -     }
 - 
 -     public static function getLocalTime(string $timezone): string
 -     {
 -         $localizationModel = Localization::firstOrFail();
 -         $time_format = $localizationModel->time_format->value ?? TimeFormat::DEFAULT;
 - 
 -         return now($timezone)->translatedFormat($time_format);
 -     }
 - 
 -     public static function getTimezonesForCountry(string $countryCode): array
 -     {
 -         return DateTimeZone::listIdentifiers(DateTimeZone::PER_COUNTRY, strtoupper($countryCode));
 -     }
 - }
 
 
  |