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));
- }
- }
|