PHP code example of ghanem / multiple-date-picker

1. Go to this page and download the library: Download ghanem/multiple-date-picker library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

ghanem / multiple-date-picker example snippets


use Ghanem\MultipleDatePicker\MultipleDatePicker;

MultipleDatePicker::make('Event Dates', 'event_dates'),

// Custom display date format (default: d/m/Y)
MultipleDatePicker::make('Dates', 'dates')
    ->dateFormat('Y-m-d'),

// Supported format tokens: d, j, D, l, m, n, M, F, Y, y

// Custom storage format (default: Y-m-d)
MultipleDatePicker::make('Dates', 'dates')
    ->storageFormat('d/m/Y'),

// Min and max date constraints
MultipleDatePicker::make('Dates', 'dates')
    ->minDate('2026-01-01')
    ->maxDate('2026-12-31'),

// Disable specific dates
MultipleDatePicker::make('Dates', 'dates')
    ->disabledDates(['2026-03-05', '2026-03-10']),

// Limit number of selectable dates
MultipleDatePicker::make('Dates', 'dates')
    ->minSelections(1)
    ->maxSelections(10),

// Sort dates automatically
MultipleDatePicker::make('Dates', 'dates')
    ->sorted(),

// Custom placeholder (Nova built-in)
MultipleDatePicker::make('Dates', 'dates')
    ->placeholder('Select your dates...'),

// Truncate dates on index view (show "+N more" badge)
MultipleDatePicker::make('Dates', 'dates')
    ->maxDisplayOnIndex(3),

// Set locale for date picker display
MultipleDatePicker::make('Dates', 'dates')
    ->locale('ar'),

Date::make('Start Date', 'start_date'),

MultipleDatePicker::make('Event Dates', 'event_dates')
    ->minDateFrom('start_date'),

Date::make('End Date', 'end_date'),

MultipleDatePicker::make('Available Dates', 'available_dates')
    ->minDateFrom('start_date')
    ->maxDateFrom('end_date'),

// Comma-separated: "01/03/2026, 15/03/2026"
MultipleDatePicker::make('Dates', 'dates')
    ->exportFormat('comma'),

// Pipe-separated: "01/03/2026 | 15/03/2026"
MultipleDatePicker::make('Dates', 'dates')
    ->exportFormat('pipe'),

// Semicolon: "01/03/2026; 15/03/2026"
MultipleDatePicker::make('Dates', 'dates')
    ->exportFormat('semicolon'),

// Newline-separated
MultipleDatePicker::make('Dates', 'dates')
    ->exportFormat('newline'),

MultipleDatePicker::make('Booking Dates', 'booking_dates')
    ->rangeMode(),

// Allow all patterns
MultipleDatePicker::make('Schedule', 'schedule_dates')
    ->allowRecurrence(),

// Allow only specific patterns
MultipleDatePicker::make('Schedule', 'schedule_dates')
    ->allowRecurrence(['weekly', 'monthly']),

// Available patterns: daily, weekly, biweekly, monthly, weekdays, weekends

MultipleDatePicker::make('Dates', 'dates')
    ->calendarView(),

MultipleDatePicker::make('Dates', 'dates')
    ->presets([
        ['label' => 'Next 7 Days', 'dates' => fn () => collect(range(0, 6))
            ->map(fn ($i) => now()->addDays($i)->format('Y-m-d'))
            ->toArray()],
        ['label' => 'This Month Weekdays', 'dates' => fn () => collect(range(1, now()->daysInMonth))
            ->map(fn ($d) => now()->startOfMonth()->addDays($d - 1))
            ->filter(fn ($d) => $d->isWeekday())
            ->map(fn ($d) => $d->format('Y-m-d'))
            ->toArray()],
        ['label' => 'Specific Dates', 'dates' => ['2026-03-01', '2026-06-15', '2026-12-25']],
    ]),

// Filter out weekends before saving
MultipleDatePicker::make('Working Days', 'working_days')
    ->beforeSave(function (array $dates) {
        return collect($dates)
            ->filter(fn ($d) => Carbon::parse($d)->isWeekday())
            ->values()
            ->toArray();
    }),

// Reverse date order when displaying
MultipleDatePicker::make('Dates', 'dates')
    ->afterResolve(fn (array $dates) => array_reverse($dates)),

// JavaScript callback when a date is selected
MultipleDatePicker::make('Dates', 'dates')
    ->onDateSelected('handleDateChange'),

// In your Nova Resource actions() method:
use Ghanem\MultipleDatePicker\Actions\BulkAddDates;
use Ghanem\MultipleDatePicker\Actions\BulkRemoveDates;

public function actions(NovaRequest $request)
{
    return [
        new BulkAddDates('dates'),        // attribute name
        new BulkRemoveDates('dates'),
    ];
}

MultipleDatePicker::make('Event Dates', 'event_dates')
    ->dateFormat('d/m/Y')
    ->minDate('2026-01-01')
    ->maxDate('2026-12-31')
    ->disabledDates(['2026-12-25'])
    ->minSelections(1)
    ->maxSelections(20)
    ->sorted()
    ->locale('en')
    ->maxDisplayOnIndex(5)
    ->calendarView()
    ->exportFormat('comma')
    ->beforeSave(fn ($dates) => array_unique($dates))
    ->placeholder('Pick event dates'),

$table->json('dates')->nullable();

protected $casts = [
    'dates' => 'array',
];