A timezone select field for Laravel Filament.
composer require tapp/filament-timezone-field:"^3.0"Note For Filament 2.x check the 2.x branch
Add to your Filament resource:
use Tapp\FilamentTimezoneField\Forms\Components\TimezoneSelect;
public static function form(Form $form): Form
{
return $form
->schema([
// ...
TimezoneSelect::make('timezone'),
// ...
]);
}To change the language of displayed timezones, use the ->language() method passing the ISO 639-1 language code:
->language('es')To use GMT instead of UTC (default is UTC), add the ->timezoneType('GMT') method:
use Tapp\FilamentTimezoneField\Forms\Components\TimezoneSelect;
public static function form(Form $form): Form
{
return $form
->schema([
// ...
TimezoneSelect::make('timezone')
->timezoneType('GMT'),
// ...
]);
}To list only the timezones for a country, you can pass the country code to ->byCountry() method. For example, to list only United States timezones:
TimezoneSelect::make('timezone')
->byCountry('US')You can also pass an array with more than one country code:
TimezoneSelect::make('timezone')
->byCountry(['US', 'AU'])To list the timezones for a region use the ->byRegion() method. You can specify a region with a Region enum value:
use Tapp\FilamentTimezoneField\Enums\Region;
TimezoneSelect::make('timezone')
->byRegion(Region::Australia)or you can use one of the PHP's DateTimeZone predifined constants:
use DateTimeZone;
TimezoneSelect::make('timezone')
->byRegion(DateTimeZone::AUSTRALIA)It's also possible to pass an array with more than one region:
use Tapp\FilamentTimezoneField\Enums\Region;
TimezoneSelect::make('timezone')
->byRegion([Region::Australia, Region::America])Tip
All Filament select field methods are available to use:
use Tapp\FilamentTimezoneField\Forms\Components\TimezoneSelect;
public static function form(Form $form): Form
{
return $form
->schema([
// ...
TimezoneSelect::make('timezone')
->searchable()
->required(),
// ...
]);
}Optionally, hide either timezone offsets or timezone names, depending on your use case:
use Tapp\FilamentTimezoneField\Forms\Components\TimezoneSelect;
public static function form(Form $form): Form
{
return $form
->schema([
// ...
TimezoneSelect::make('timezone')
->hideNames(),
// ...
]);
}use Tapp\FilamentTimezoneField\Forms\Components\TimezoneSelect;
public static function form(Form $form): Form
{
return $form
->schema([
// ...
TimezoneSelect::make('timezone')
->hideOffset(),
// ...
]);
}Optionally, hydrate the field with the timezone from the user's browser. If there is already a value, it will not be overridden.
use Tapp\FilamentTimezoneField\Forms\Components\TimezoneSelect;
public static function form(Form $form): Form
{
return $form
->schema([
// ...
TimezoneSelect::make('timezone')
->getTimezoneFromBrowser()
// ...
]);
}use Tapp\FilamentTimezoneField\Tables\Columns\TimezoneColumn;
public static function table(Table $table): Table
{
return $table
->columns([
//...
TimezoneColumn::make('timezone')
->timezoneType('GMT')
->formattedOffsetAndTimezone(),
])
// ...
}| Method | Description |
|---|---|
| ->formattedTimezone() | Show formatted timezone name |
| ->formattedOffsetAndTimezone() | Show formatted offset and timezone name |
| ->timezoneType('GMT') | Use GMT instead of UTC |
use Tapp\FilamentTimezoneField\Tables\Filters\TimezoneSelectFilter;
public static function table(Table $table): Table
{
return $table
//...
->filters([
TimezoneSelectFilter::make('timezone'),
// ...
])
}
