A Laravel-compatible Composer package that converts dates between Hijri (Qamari), Jalali (Shamsi/Persian), Gregorian, and Julian calendars.
It also includes powerful date utilities, localization, numeral conversions, and Artisan command support.
Please consider a ⭐ if this package helps you.
✅ Convert between Hijri, Jalali, Gregorian, and Julian
✅ Get localized month and weekday names (English, Arabic, Persian)
✅ Flexible date formatting
✅ Compare and get differences in days
✅ Get today’s date in any calendar
✅ Add or subtract days in any calendar
✅ Convert Arabic and English numerals
✅ Validate dates across calendars
✅ Integrated Laravel Facade and Service Provider
✅ Artisan command for quick date conversion
✅ Carbonize any calendar date
composer require hanifhefaz/dcterFor Laravel 8+, it auto-registers via package discovery.
If not, manually add to config/app.php:
'providers' => [
HanifHefaz\Dcter\DcterServiceProvider::class,
],
'aliases' => [
'Dcter' => HanifHefaz\Dcter\Facades\Dcter::class,
],Dcter includes 8 core conversion methods and 1 Carbonize helper:
| Method | Description |
|---|---|
HijriToGregorian($date) |
Hijri ➜ Gregorian |
GregorianToHijri($date) |
Gregorian ➜ Hijri |
JulianToHijri($date) |
Julian ➜ Hijri |
HijriToJulian($date) |
Hijri ➜ Julian |
GregorianToJalali($date) |
Gregorian ➜ Jalali |
JalaliToGregorian($date) |
Jalali ➜ Gregorian |
HijriToJalali($date) |
Hijri ➜ Jalali |
JalaliToHijri($date) |
Jalali ➜ Hijri |
Carbonize($date) |
Convert any YYYY-MM-DD date into a Carbon object |
Example:
use HanifHefaz\Dcter\Dcter;
$date = "2025-03-01";
echo Dcter::GregorianToHijri($date); // 1446-08-29Below are the new features introduced:
Dcter::getMonthName(3, 'hijri', 'ar'); // ربيع الأول
Dcter::getMonthName(1, 'jalali', 'fa'); // فروردینDcter::getWeekdayName('2025-10-08', 'gregorian', 'en'); // Wednesday
Dcter::getWeekdayName('1447-04-15', 'hijri', 'ar'); // الأربعاءDcter::formatDate('1447-04-15', 'hijri', 'd F Y', 'en');
// 15 Rabi' al-thani 1447Dcter::compareDates('1447-01-10', '1447-02-01', 'hijri');
// returns -1 (first is earlier)Dcter::diffInDays('1447-01-10', '1447-01-20', 'hijri');
// returns 10Dcter::now(); // Gregorian today
Dcter::now('hijri'); // Hijri today
Dcter::now('jalali'); // Jalali todayDcter::addDays('1447-01-10', 10, 'hijri'); // 1447-01-20
Dcter::subDays('1447-01-10', 5, 'hijri'); // 1447-01-05Dcter::toArabicNumerals('2025-10-08'); // ٢٠٢٥-١٠-٠٨
Dcter::toEnglishNumerals('٢٠٢٥-١٠-٠٨'); // 2025-10-08Dcter::isValidDate('1447-13-01', 'hijri'); // false$carbon = Dcter::Carbonize('1402-01-25');
echo $carbon->addDays(10); // 1402-02-05 00:00:00Once installed, use the Facade directly:
use Dcter;
echo Dcter::GregorianToHijri('2025-03-01');A handy console command to convert dates:
php artisan dcter:convert 2025-03-01 --from=gregorian --to=hijriOutput:
Converted: 1446-08-29
You can run all tests with:
vendor/bin/phpunitTests are located in /tests and cover all core methods.
You may publish the config file (if extended later) using:
php artisan vendor:publish --provider="HanifHefaz\Dcter\DcterServiceProvider"Contributions are welcome! Please read the CONTRIBUTING.md guide before submitting a PR.
Hanif Hefaz |
This package is open-sourced software licensed under the MIT license.
| Category | Method |
|---|---|
| Conversion | HijriToGregorian, GregorianToHijri, GregorianToJalali, JalaliToGregorian, HijriToJulian, JulianToHijri, HijriToJalali, JalaliToHijri |
| Formatting & Localization | getMonthName, getWeekdayName, formatDate |
| Comparison & Math | compareDates, diffInDays, addDays, subDays |
| Utilities | now, isValidDate, toArabicNumerals, toEnglishNumerals, Carbonize |
| Laravel Integration | Facade, ServiceProvider, Artisan Command |
