PHPackages                             ghanem/multiple-date-picker - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. ghanem/multiple-date-picker

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

ghanem/multiple-date-picker
===========================

A Laravel Nova field for selecting multiple dates with a beautiful date picker interface.

v3.0.0(3mo ago)07.2k↑750%MITPHPPHP ^8.1CI failing

Since Oct 2Pushed 3mo ago1 watchersCompare

[ Source](https://github.com/AbdullahGhanem/MultipleDatePicker)[ Packagist](https://packagist.org/packages/ghanem/multiple-date-picker)[ RSS](/packages/ghanem-multiple-date-picker/feed)WikiDiscussions main Synced yesterday

READMEChangelog (4)Dependencies (4)Versions (6)Used By (0)

Nova Multiple DatePicker
========================

[](#nova-multiple-datepicker)

[![Latest Version on Packagist](https://camo.githubusercontent.com/4b8986eed87342bfd3bbd1847b1d80201bc4649b49e41c379a132891d52ca274/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f6768616e656d2f6d756c7469706c652d646174652d7069636b65722e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/ghanem/multiple-date-picker)[![Total Downloads](https://camo.githubusercontent.com/d90531ed7f2d07f5f6d1403523f544ce0257d7206ed18c5e1cf020c61e4a4d0e/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f6768616e656d2f6d756c7469706c652d646174652d7069636b65722e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/ghanem/multiple-date-picker)

A [Laravel Nova](https://nova.laravel.com/) field for selecting multiple dates with a beautiful date picker interface.

Requirements
------------

[](#requirements)

- `php: ^8.1`
- `laravel/nova: ^4.0|^5.0`

Features
--------

[](#features)

- Select multiple dates in a single field
- Lightweight (~185KB) using [v-calendar](https://vcalendar.io/)
- Configurable display and storage date formats
- Min/max date constraints
- Disable specific dates
- Min/max selection limits
- Automatic date sorting
- Custom placeholder text
- Index view truncation with "+N more" badge
- Full dark mode support
- Readonly/disabled state support
- Duplicate date prevention
- Graceful handling of invalid dates
- Locale / i18n support
- Dependent fields (dynamic min/max from other fields)
- Export-friendly format (comma, pipe, semicolon, newline)
- Date range mode (pick start &amp; end, auto-fill between)
- Recurrence patterns (daily, weekly, biweekly, monthly, weekdays, weekends)
- Calendar heatmap view on detail page
- Date presets for quick selection
- Bulk actions (add/remove dates across resources)
- Before-save and after-resolve callback hooks
- JavaScript date-selected callback

Installation
------------

[](#installation)

```
composer require ghanem/multiple-date-picker
```

Usage
-----

[](#usage)

### Basic Usage

[](#basic-usage)

```
use Ghanem\MultipleDatePicker\MultipleDatePicker;

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

### Configuration Options

[](#configuration-options)

```
// 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),
```

### Locale / i18n

[](#locale--i18n)

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

### Dependent Fields

[](#dependent-fields)

Dynamically set min/max dates based on other fields on the same form:

```
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'),
```

### Export Format

[](#export-format)

Control how dates appear in Nova CSV exports:

```
// 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'),
```

### Date Range Mode

[](#date-range-mode)

Pick a start and end date, automatically store all dates in between:

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

### Recurrence Patterns

[](#recurrence-patterns)

Generate dates based on recurring patterns:

```
// 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
```

### Calendar Heatmap View

[](#calendar-heatmap-view)

Display a mini calendar on the detail page instead of badges:

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

### Date Presets

[](#date-presets)

Predefined date selections for quick selection:

```
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']],
    ]),
```

### Callback Hooks

[](#callback-hooks)

Transform dates before saving or after resolving:

```
// 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'),
```

### Bulk Actions

[](#bulk-actions)

Add or remove dates across multiple resources:

```
// 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'),
    ];
}
```

### Full Example

[](#full-example)

```
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'),
```

### Database Migration

[](#database-migration)

The field stores dates as a JSON array:

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

Cast it in your model:

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

Testing
-------

[](#testing)

```
composer test
```

License
-------

[](#license)

Nova Multiple DatePicker is open-sourced software licensed under the [MIT license](LICENSE.md).

Sponsor
-------

[](#sponsor)

[Become a Sponsor](https://github.com/sponsors/AbdullahGhanem)

###  Health Score

45

—

FairBetter than 91% of packages

Maintenance78

Regular maintenance activity

Popularity23

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity60

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~313 days

Total

5

Last Release

116d ago

Major Versions

v1.0.2 → v2.02025-01-26

v2.0 → v3.0.02026-03-08

PHP version history (2 changes)v1.0PHP ^7.3|^8.0

v3.0.0PHP ^8.1

### Community

Maintainers

![](https://www.gravatar.com/avatar/fafeedb68c6ad2ddbb249caed67289c8c74073d25fcfb210534a9769d393dda4?d=identicon)[ghanem](/maintainers/ghanem)

---

Top Contributors

[![AbdullahGhanem](https://avatars.githubusercontent.com/u/5055892?v=4)](https://github.com/AbdullahGhanem "AbdullahGhanem (10 commits)")

---

Tags

laravellaravel-novanovalaravelfielddate pickernovamultiple-dates

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/ghanem-multiple-date-picker/health.svg)

```
[![Health](https://phpackages.com/badges/ghanem-multiple-date-picker/health.svg)](https://phpackages.com/packages/ghanem-multiple-date-picker)
```

###  Alternatives

[markwalet/nova-modal-response

A Laravel Nova asset for Modal responses on an action.

17878.9k](/packages/markwalet-nova-modal-response)[alexwenzel/nova-dependency-container

A Laravel Nova 4 form container for grouping fields that depend on other field values.

471.1M2](/packages/alexwenzel-nova-dependency-container)[outl1ne/nova-color-field

A Laravel Nova Color Picker field.

26263.8k](/packages/outl1ne-nova-color-field)[optimistdigital/nova-color-field

A Laravel Nova Color Picker field.

26256.9k](/packages/optimistdigital-nova-color-field)[sietse85/nova-button

(Nova 4+) A Laravel Nova package for adding buttons to your resources.

37371.5k](/packages/sietse85-nova-button)[optimistdigital/nova-notes-field

This Laravel Nova package adds a notes field to Nova's arsenal of fields.

52145.0k](/packages/optimistdigital-nova-notes-field)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
