eternicode/bootstrap-datepicker
A Bootstrap-based datepicker built with jQuery, offering flexible date selection with multiple views, localization/i18n, formatting, start/end limits, and events. Easy to integrate with forms and supports many options and plugins for customization.
Install via npm (assuming Bootstrap 5+ is already in your project):
npm install @eternicode/bootstrap-datepicker
Add to your resources/js/app.js (or equivalent):
import 'bootstrap-datepicker';
Include CSS/JS in Blade:
<!-- resources/views/your-form.blade.php -->
<link href="{{ asset('css/bootstrap-datepicker.min.css') }}" rel="stylesheet">
<script src="{{ asset('js/bootstrap-datepicker.min.js') }}"></script>
Basic Initialization:
<input type="text" class="form-control datepicker" name="event_date">
<script>
$(document).ready(function() {
$('.datepicker').datepicker();
});
</script>
Use the datepicker class on an <input> field to instantly enable date selection. Pair with Laravel Validation:
$request->validate([
'event_date' => 'required|date_format:Y-m-d',
]);
Dynamic Initialization (Laravel Blade + Alpine.js):
<input x-data="{ date: '' }" x-model="date" class="datepicker" name="due_date">
<script>
document.addEventListener('alpine:init', () => {
Alpine.data('datepicker', () => ({
init() {
this.$nextTick(() => {
$(this.$el).datepicker({
format: 'yyyy-mm-dd',
autoclose: true
});
});
}
}));
});
</script>
Server-Side Integration:
Carbon instances in your database.return view('form', ['default_date' => $event->date->format('d/m/Y')]);
Carbon::parse($request->date) to handle input.Multi-Date Picker (Range Selection):
<div class="input-group">
<input type="text" class="form-control datepicker" name="start_date">
<span class="input-group-text">to</span>
<input type="text" class="form-control datepicker" name="end_date">
</div>
<script>
$('.datepicker').datepicker({
autoclose: true,
todayHighlight: true,
toggleActive: true // Enable range selection
});
</script>
Form Requests: Extend FormRequest to handle date parsing:
public function rules()
{
return [
'date' => 'required|date_format:d/m/Y',
];
}
public function prepareForValidation()
{
$this->merge([
'date' => Carbon::createFromFormat('d/m/Y', $this->date)->format('Y-m-d'),
]);
}
Livewire/Alpine: Use wire:ignore to prevent Livewire from touching the datepicker:
<input wire:ignore class="datepicker" x-model="date">
jQuery Dependency:
bootstrap-datepicker.js.resources/js/app.js:
import 'jquery';
import 'bootstrap-datepicker';
Date Format Mismatches:
format isn’t set, the package defaults to mm/dd/yyyy. Always explicitly define it:
$('.datepicker').datepicker({ format: 'yyyy-mm-dd' });
Conflicts with Bootstrap 5:
data-bs-* attributes. Avoid naming conflicts:
<!-- Bad: Overrides Bootstrap 5 tooltip -->
<input data-toggle="tooltip" class="datepicker">
<!-- Good -->
<input data-bp-toggle="tooltip" class="datepicker">
Server-Side Timezone Issues:
// Store
$event->date = $request->date; // Assumes Y-m-d format
// Display
$event->date->setTimezone($user->timezone)->format('d/m/Y');
onShow, onSelect, etc., for debugging:
$('.datepicker').datepicker({
onShow: function() { console.log('Picker shown'); },
onSelect: function(date) { console.log('Selected:', date); }
});
Custom Templates:
Override the default HTML template via template option:
$('.datepicker').datepicker({
template: `
<div class="custom-datepicker">
<div class="custom-header"></div>
<div class="custom-body"></div>
</div>
`
});
Localization: Load translations dynamically:
$('.datepicker').datepicker({
language: '{{ app()->getLocale() }}',
weekStart: 1 // For ISO week numbering
});
Ensure locale files exist in node_modules/bootstrap-datepicker/locales/.
Accessibility: Add ARIA attributes for screen readers:
$('.datepicker').datepicker({
autoclose: true,
todayBtn: 'linked',
keyboardNavigation: true,
todayHighlight: true
});
Pair with Blade:
<input aria-label="Select event date" class="datepicker">
Laravel Mix/Webpack:
For better asset handling, configure webpack.mix.js:
mix.js('resources/js/app.js', 'public/js')
.postCss('resources/css/app.css', 'public/css', []);
How can I help you explore Laravel packages today?