hekmatinasser/jalali
Jalali (Shamsi) date/time utilities for PHP and Laravel. Converts between Jalali (solar) and Gregorian calendars, provides helper functions for formatting and working with dates. Extends PHP DateTime and is compatible with Carbon.
DateTime and is Carbon-compatible, enabling seamless integration with Laravel’s built-in date/time utilities (e.g., Carbon, CarbonImmutable). This reduces friction in adoption.Jalali class wrappers, requiring minimal changes to existing date/time logic. Example:
use Jalali\Jalalian\Jalalian;
$jalaliDate = Jalalian::fromFormat('Y-m-d', '1399/10/10'); // Convert to Jalali
$gregorianDate = $jalaliDate->toCarbon(); // Convert back to Gregorian
YYYY/MM/DD). For numeric storage (e.g., MySQL DATE), additional validation logic may be needed.carbon/carbon to a stable version (e.g., ^2.65) in composer.json.CarbonImmutable if the project relies on immutable dates.Jalali instances respect PHP’s default timezone or require manual adjustments.DATE in DB, user input format)? Will migration be needed?Carbon extensively? If not, test Jalali with PHP’s native DateTime for consistency.now(), parse()).accessors, mutators).jalali|date rules).Phase 1: Proof of Concept (PoC)
composer require hekmatinasser/jalali
use Jalali\Jalalian\Jalalian;
$jalali = Jalalian::fromFormat('Y/m/d', '1403/05/10'); // 10 May 1403 (Jalali)
$gregorian = $jalali->toCarbon(); // Convert to Gregorian for storage/processing
1399/12/30 → Gregorian 2021-03-20).Phase 2: Core Integration
config/app.php and create a facade (optional) for consistency:
// app/Providers/JalaliServiceProvider.php
public function register() {
app()->singleton('jalali', function () {
return new Jalalian();
});
}
Carbon facade to include Jalali methods:
// app/Extensions/CarbonExtension.php
Carbon::macro('toJalali', function () {
return Jalalian::fromCarbon($this);
});
// app/Models/Appointment.php
protected $appends = ['jalali_date'];
public function getJalaliDateAttribute() {
return $this->date->toJalali()->format('Y/m/d');
}
Phase 3: Full Adoption
Rule objects).Carbon compatibility.carbon/carbon is pinned.VARCHAR) or use DATE with validation.carbon/carbon to avoid breaking changes. Consider forking if the package stagnates.LIKE for partial matches).| Failure Scenario | Impact | Mitigation |
|---|---|---|
| Package bug (e.g., incorrect conversion) | Incorrect dates in UI/logic | Fallback to Gregor |
How can I help you explore Laravel packages today?