zenepay/filament-buddhist-date-picker
Installation:
composer require zenepay/filament-buddhist-date-picker
The package auto-detects Filament 4 and registers the extension.
First Use Case:
Replace a standard DatePicker with Buddhist-era support:
use Filament\Forms\Components\DatePicker;
DatePicker::make('birth_date')
->label('Birth Date (Buddhist Era)')
->buddhist(); // Enable Buddhist era
Where to Look First:
resources/views/vendor/filament/forms/components/date-picker.blade.php if customizing templates.Basic Integration:
// Form builder
DatePicker::make('event_date')
->buddhist()
->required()
->maxDate(now()->addYears(10));
buddhist(): Toggle Buddhist era (default: false).buddhistEraLabel(): Customize the era label (e.g., "BE" → "Buddhist Era").convertToGregorian(): Force output in Gregorian format (useful for storage).Dynamic Era Switching:
DatePicker::make('custom_date')
->buddhist(fn ($get) => $get('use_buddhist_era'))
->rules(['required', 'date']);
DateTimePicker:
DateTimePicker::make('scheduled_at')
->buddhist()
->timezone('Asia/Bangkok');
DateTimePicker features (time zones, seconds, etc.) with Buddhist-era years.Table Columns:
use Filament\Tables\Columns\DateColumn;
DateColumn::make('created_at')
->dateFormat('Y-m-d')
->buddhist(); // Display Buddhist era in tables
DateColumn for consistent Buddhist-era display in lists.Validation & Storage:
->formatStateUsing() to display Buddhist-era dates in views:
->formatStateUsing(fn ($state) => Carbon::parse($state)->buddhistYear)
app()->setLocale('th') for Thai-specific formatting.return $record->toArray(['created_at' => fn ($date) => $date->format('Y-m-d')]);
Double Conversion:
buddhist(), dates may misalign.Time Zone Confusion:
DateTimePicker uses the correct timezone:
->timezone('Asia/Bangkok') // Critical for accurate display
config/app.php if not specified.Validation Quirks:
after:yesterday) may fail if Buddhist-era dates are not converted.->convertToGregorian() or manually parse:
->rules(['after:yesterday', fn ($attribute, $value, $fail) => ...])
Template Overrides:
DatePicker may break Buddhist-era rendering.@php
$isBuddhist = $get('buddhist') ?? false;
@endphp
<x-filament::input
x-data="{
...
}"
x-bind:buddhist-era="{{ $isBuddhist }}"
>
dd($record->birth_date->copy()->setToStringFormat('Y-m-d (BE: Y)'));
\Log::debug('Buddhist Year:', [
'input' => $date->year,
'gregorian' => $date->copy()->subYears(543)->year,
]);
(Note: 543 = years between 2022 and 2565 BE.)DatePicker::make('date')
->buddhist()
->buddhistEraLabel('BE'); // Override "Buddhist Era" → "BE"
$resource->appendToArrayRepresentation(function ($record) {
return [
'birth_date_buddhist' => $record->birth_date->copy()->addYears(543)->format('Y-m-d'),
];
});
// config/filament.php
'components' => [
'date_picker' => [
'default_buddhist' => env('FILAMENT_BUDDHIST_DEFAULT', false),
],
];
(Note: Requires custom package extension.)protected static function cacheKey($value): string {
return 'buddhist_'.$value->format('Y-m-d');
}
How can I help you explore Laravel packages today?