Search by

phattarachai / filament-thai-date-picker

phatchai

FilamentPHP Thai Date Picker Form Component

Package info

github.com/phattarachai/filament-thai-date-picker

Language:JavaScript

pkg:composer/phattarachai/filament-thai-date-picker

Statistics

Installs: 2 437

Dependents: 0

Suggesters: 0

Stars: 6

Open Issues: 0

v4.1.0 2026-10-11 08:21 UTC

README

Latest Version on Packagist Tests Code Style PHP Version Laravel Version Total Downloads

ปฏิทิน Thai Date Picker สำหรับ Filament Form Component วัน/เดือน/ปีที่แสดงใน Form เป็นภาษาไทย (พ.ศ.) แต่เก็บเข้า Model เป็นปี ค.ศ.ตามปกติ

Thai Date Picker

Version ที่รองรับ

ThaiDatePicker Filament PHP Laravel สถานะ
4.x 5.x 8.3+ 12, 13 เวอร์ชันหลัก พัฒนาต่อเนื่อง
3.x 5.x 8.2+ ตาม Filament แก้บั๊กเท่านั้น
2.x 4.x 8.2+ ตาม Filament แก้บั๊กเท่านั้น
1.x 3.x 8.1+ ตาม Filament แก้บั๊กเท่านั้น

ใช้ Filament 5 อยู่บน PHP 8.2 หรือ Laravel 11 ให้ใช้ 3.x (^3.0) ส่วนโปรเจกต์ใหม่ใช้ 4.x

ตั้งแต่ 4.1 ต้องการ Filament 5.10.1 ขึ้นไป ถ้า Filament ในโปรเจกต์เก่ากว่านั้น composer จะติดตั้ง 4.0.x ให้แทน

วิธีติดตั้ง

Run คำสั่ง composer require เพื่อติดตั้ง Package

composer require phattarachai/filament-thai-date-picker

ทำการ publish ไฟล์ javascript ของ picker (ถ้าใน post-autoload-dump ของ composer.json มีคำสั่งนี้อยู่แล้ว ข้ามขั้นตอนนี้ได้)

php artisan filament:upgrade

วิธีใช้งาน ThaiDatePicker

ใช้เหมือน DatePicker ปกติ แต่เรียกใช้ class ThaiDatePicker แทน

use Phattarachai\FilamentThaiDatePicker\ThaiDatePicker;

ThaiDatePicker::make('order_date')
    ->label('วันที่สั่งซื้อ')
    ->suffixIcon('heroicon-o-calendar')

แบบ มีเวลา

use Phattarachai\FilamentThaiDatePicker\ThaiDateTimePicker;

ThaiDateTimePicker::make('transfer_at')
    ->label('เวลาที่โอน')
    ->suffixIcon('heroicon-o-calendar')

ช่อง input แสดงวันที่แบบ j M y (เช่น 11 ต.ค. 69) และ j M y H:i เมื่อมีเวลา เปลี่ยนรูปแบบได้ด้วย displayFormat() ซึ่งใช้ format แบบ PHP เหมือน DatePicker ปกติ โดยปี Y และ y จะแสดงเป็นปี พ.ศ.

ThaiDatePicker::make('order_date')
    ->displayFormat('j F Y') // 11 ตุลาคม 2569

ThaiDateTimePicker::make('transfer_at')
    ->displayFormat('d/m/Y H:i:s') // 11/10/2569 14:30:00

ใช้ ThaiDateTimePicker::make('opens_at')->date(false) เป็นช่องเลือกเวลาอย่างเดียวได้ แสดงผลตาม time format ของ Filament

โดยปี พ.ศ.จะใช้สำหรับการแสดงผลเท่านั้น เวลาใช้งาน state เพื่อบันทึกลงฐานข้อมูลจะได้เป็นปี ค.ศ. ตามปกติ

$data = $this->form->getState();
// $data['order_date'] = '2024-05-17'

การแสดงวันที่ภาษาไทยใน Infolist

นอกจาก Datepicker แล้วใน package นี้เพิ่ม method thaidate() และ thaidatetime() สำหรับช่วยการแสดงผล Infolist วันที่ปี พ.ศ. ภาษาไทย

use Filament\Infolists\Components\TextEntry;

TextEntry::make('order_date')
    ->label('วันที่สั่งซื้อ')
    ->thaidate(),
    // 18 พ.ค. 67
use Filament\Infolists\Components\TextEntry;

TextEntry::make('created_at')
    ->label('วันที่สร้าง')
    ->thaidatetime(),
    // 18 พ.ค. 67 12:05

ถ้า field วันที่เป็นค่า null ได้ และต้องการให้แสดงค่า default ให้ส่ง parameter default เข้าไป

use Filament\Infolists\Components\TextEntry;

TextEntry::make('confirm_date')
    ->label('วันที่ยืนยัน')
    ->thaidate(default: '-'),
    // -

การแสดงวันที่ภาษาไทยใน Table Column

เช่นเดียวกับ Infolist package นี้เพิ่ม macro method thaidate() สำหรับการ format การแสดงผลคอลัมน์วันที่เพื่อให้แสดงผลเป็นปี พ.ศ. ภาษาไทย ได้เลย

use Filament\Tables;

Tables\Columns\TextColumn::make('order_date')
    ->label('วันที่')
    ->thaidate()
    // สามารถระบุ date format ได้เหมือน function date_format ของ PHP
    // default format เป็น j M y
    // เช่น 18 พ.ค. 67

ถ้าเป็น วันที่และเวลาใช้ method thaidatetime()

use Filament\Tables;

Tables\Columns\TextColumn::make('created_at')
    ->label('วันที่สร้าง')
    ->thaidatetime()
    // default format เป็น j M y H:i
    // เช่น 18 พ.ค. 67 12:00

ทั้ง thaidate() และ thaidatetime() ใน Table Column และ Infolist รับ parameter ชุดเดียวกัน

->thaidate(format: 'j F Y', timezone: 'Asia/Bangkok', default: '-')
// 18 พฤษภาคม 2567
  • format — date format ของ PHP เช่น j F Y สำหรับชื่อเดือนเต็ม
  • timezone — ถ้าไม่ระบุ จะใช้ timezone ของ column หรือ entry นั้น
  • default — ข้อความที่แสดงเมื่อค่าเป็น null

ถ้าต้องการแสดงเวลาเป็นบรรทัดรองใต้วันที่ ใช้ timeDescription() กับ column ที่ cast เป็นวันที่

Tables\Columns\TextColumn::make('created_at')
    ->thaidate()
    ->timeDescription()
    // 18 พ.ค. 67
    // 12:05

ผู้พัฒนา

พัฒนาและดูแลโดย บริษัท ภัทรชัย อาร์ทิซาน จำกัด (Phattarachai Artisan) บริษัทที่ปรึกษาและพัฒนาเว็บ ที่เรียนรู้และแบ่งปันกับชุมชน Laravel แพ็กเกจนี้แบ่งปันให้ชุมชนนำไปใช้และต่อยอดได้อย่างอิสระ

ดูแพ็กเกจอื่นของเราได้ที่ phattarachai.dev/open-source และติดต่อเราได้ที่ phattarachai.dev

License

The MIT License (MIT).