Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

Timezone.php 1.8KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. <?php
  2. namespace App\Models\Locale;
  3. use DateTime;
  4. use DateTimeZone;
  5. use Exception;
  6. use Illuminate\Database\Eloquent\Relations\BelongsTo;
  7. use Squire\Model;
  8. /**
  9. * @property int $id
  10. * @property int $country_id
  11. * @property string $country_code
  12. * @property string $name
  13. * @property int $gmt_offset
  14. * @property string $gmt_offset_name
  15. * @property string $abbreviation
  16. * @property string $tz_name
  17. */
  18. class Timezone extends Model
  19. {
  20. public static array $schema = [
  21. 'id' => 'integer',
  22. 'country_id' => 'integer',
  23. 'country_code' => 'string',
  24. 'name' => 'string',
  25. 'gmt_offset' => 'integer',
  26. 'gmt_offset_name' => 'string',
  27. 'abbreviation' => 'string',
  28. 'tz_name' => 'string',
  29. ];
  30. public function country(): BelongsTo
  31. {
  32. return $this->belongsTo(Country::class, 'country_id');
  33. }
  34. public static function getTimezoneOptions(?string $countryCode = null): array
  35. {
  36. if (empty($countryCode)) {
  37. return [];
  38. }
  39. $timezones = self::where('country_code', $countryCode)->get();
  40. if ($timezones->isEmpty()) {
  41. return [];
  42. }
  43. return $timezones
  44. ->mapWithKeys(static function ($timezone) {
  45. $localTime = self::getLocalTime($timezone->name); // Adjust this as per your column name
  46. $cityName = str_replace('_', ' ', last(explode('/', $timezone->name))); // Adjust this as per your column name
  47. return [$timezone->name => "{$cityName} ({$timezone->abbreviation}) {$localTime}"];
  48. })
  49. ->toArray();
  50. }
  51. /**
  52. * @throws Exception
  53. */
  54. public static function getLocalTime(string $timezone): string
  55. {
  56. return (new DateTime('now', new DateTimeZone($timezone)))->format('g:i A');
  57. }
  58. }