Installation:
composer require jenssegers/date
Laravel automatically detects the package due to its ServiceProvider (no manual registration needed in config/app.php).
First Use Case:
Replace native Carbon usage with the extended Date facade:
use Jenssegers\Date\Date;
// Basic usage (identical to Carbon)
$date = Date::now();
echo $date->format('Y-m-d'); // Outputs: 2023-11-15
// Locale-aware formatting
app()->setLocale('fr');
echo $date->diffForHumans(); // Outputs: "il y a quelques secondes"
Key Starting Points:
Jenssegers\Date\Facades\Date (alias Date).config/date.php (if published via php artisan vendor:publish --provider="Jenssegers\Date\DateServiceProvider").Locale-Aware Date Handling:
// Dynamic locale switching
app()->setLocale('de');
$date = Date::parse('2023-12-25');
echo $date->diffForHumans(); // "in 3 Tagen"
// Fallback to default locale
echo $date->setLocale('en')->diffForHumans(); // "in 3 days"
Timezone Management:
$date = Date::now()->timezone('America/New_York');
echo $date->format('H:i'); // Time in New York timezone
Translation Integration:
php artisan vendor:publish --tag=date-translations
resources/lang/{locale}/date.php (e.g., for diffForHumans tokens like |1 minute ago).Database Operations:
// Store localized timestamps
$user->updated_at = Date::now()->setLocale('ja')->format('Y-m-d H:i:s');
API Responses:
return response()->json([
'created_at' => Date::parse($request->created_at)->setLocale('es')->format('d \d\e F \d\e Y'),
]);
app()->setLocale() in middleware to enforce locale per request.Date::parse($request->date)->isValid()).app()->setLocale('test') and assert translations:
$this->assertEquals('test translation', Date::now()->diffForHumans());
Locale Dependency:
diffForHumans(), format(), and timespan() require a valid locale. Always set a fallback:
$date->setLocale(app()->getLocale() ?? 'en');
Undefined index: diffForHumans if locale translations are missing.Translation Mismatches:
Timezone Confusion:
Date::now() uses the system timezone by default. Explicitly set timezones for consistency:
Date::now('UTC'); // Avoids server timezone quirks
Deprecated Methods:
translate()) were moved to Carbon 2. Use Carbon’s equivalents:
// Old (deprecated)
$date->translate('de');
// New
$date->setLocale('de');
dd(app()->getLocale()); // Verify active locale
dd(Date::getTranslations()); // Lists available translations
diffForHumans() returns English strings, publish translations or check config/date.php for fallback_locale.Custom Formatters:
Extend the Date class to add locale-specific formats:
class ExtendedDate extends \Jenssegers\Date\Date {
public function localizedWeekday() {
return $this->translate($this->format('l'));
}
}
Service Provider Hooks:
Override the default locale in AppServiceProvider:
public function boot() {
Date::setDefaultLocale('pt_BR');
}
Carbon Compatibility: Leverage Carbon’s extenders for additional functionality while maintaining locale support.
$date = Date::parse($user->created_at)->setTimezone('Europe/Berlin');
How can I help you explore Laravel packages today?