-
Jalali calendar is a solar calendar that was used in Persia, variants of which today are still in use in Iran as well as Afghanistan. Read more on Wikipedia or see Calendar Converter.
-
Calendar conversion is based on the algorithm provided by Kazimierz M. Borkowski and has a very good performance.
-
CalendarUtils class was ported from jalaali/jalaali-js
- High human readable API
- DateTime manipulating API
- DateTime comparing API
- Immutable
If you are using version <= 2.*, please read old docs
php >= 7.0
Run the Composer update command
$ composer require morilog/jalali:3.*
In the current version, I introduced Jalalian class for manipulating Jalali date time
In version >= 1.1, you can use jdate() instead of Jalalian::forge();
// the default timestamp is Now
$date = \Morilog\Jalali\Jalalian::now()
// OR
$date = jdate();
// pass timestamps
$date = Jalalian::forge(1333857600);
// OR
$date = jdate(1333857600);
// pass human readable strings to make timestamps
$date = Jalalian::forge('last sunday');
// get the timestamp
$date = Jalalian::forge('last sunday')->getTimestamp(); // 1333857600
// format the timestamp
$date = Jalalian::forge('last sunday')->format('%B %d، %Y'); // دی 02، 1391
$date = Jalalian::forge('today')->format('%A, %d %B %y'); // جمعه، 23 اسفند 97
// get a predefined format
$date = Jalalian::forge('last sunday')->format('datetime'); // 1391-10-02 00:00:00
$date = Jalalian::forge('last sunday')->format('date'); // 1391-10-02
$date = Jalalian::forge('last sunday')->format('time'); // 00:00:00
// get relative 'ago' format
$date = Jalalian::forge('now - 10 minutes')->ago() // 10 دقیقه پیشpublic static function now(?\DateTimeZone $timeZone = null): Jalalian
$jDate = Jalalian::now();public static function fromCarbon(Carbon $carbon): Jalalian
$jDate = Jalalian::fromCarbon(Carbon::now());public static function fromFormat(string $format, string $timestamp, ?\DateTimeZone$timeZone = null): Jalalian
$jDate = Jalalian::fromFormat('Y-m-d H:i:s', '1397-01-18 12:00:40');public static function forge($timestamp, ?\DateTimeZone $timeZone = null): Jalalian
// Alias fo fromDatetimepublic static function fromDateTime($dateTime, ?\DateTimeZone $timeZone = null): Jalalian
$jDate = Jalalian::fromDateTime(Carbon::now())
// OR
$jDate = Jalalian::fromDateTime(new \DateTime());
// OR
$jDate = Jalalian::fromDateTime('yesterday');public function getMonthDays(): int
$date = (new Jalalian(1397, 1, 18))->getMonthDays()
// output: 31public function getMonth(): int
$date = (new Jalalian(1397, 1, 18))->getMonth()
// output: 1public function isLeapYear(): bool
$date = (new Jalalian(1397, 1, 18))->isLeapYear()
// output: falsepublic function getYear(): int
$date = (new Jalalian(1397, 1, 18))->getYear()
// output: 1397public function subMonths(int $months = 1): Jalalian
$date = (new Jalalian(1397, 1, 18))->subMonths(1)->toString()
// output: 1396-12-18 00:00:00public function subYears(int $years = 1): Jalalian
$date = (new Jalalian(1397, 1, 18))->subYears(1)->toString()
// output: 1396-01-18 00:00:00public function getDay(): int
$date = (new Jalalian(1397, 1, 18))->getDay()
// output: 18public function getHour(): int
$date = (new Jalalian(1397, 1, 18, 12, 0, 0))->getHour()
// output: 12
public function getMinute(): int
$date = (new Jalalian(1397, 1, 18, 12, 10, 0))->getMinute()
// output: 10public function getSecond(): int
$date = (new Jalalian(1397, 1, 18, 12, 10, 45))->getSecond()
// output: 45public function getTimezone(): \DateTimeZone
// Get current timezonepublic function addMonths(int $months = 1): Jalalian
$date = (new Jalalian(1397, 1, 18, 12, 10, 0))->addMonths(1)->format('m')
// output: 02public function addYears(int $years = 1): Jalalian
$date = (new Jalalian(1397, 1, 18, 12, 10, 0))->addYears(1)->format('Y')
// output: 1398public function getDaysOf(int $monthNumber = 1): int
$date = (new Jalalian(1397, 1, 18, 12, 10, 0))->getDaysOf(1)
// output: 31public function addDays(int $days = 1): Jalalian
$date = (new Jalalian(1397, 1, 18, 12, 10, 0))->addDays(1)->format('d')
// output: 18public function toCarbon(): Carbon
$date = (new Jalalian(1397, 1, 18, 12, 10, 0))->toCarbon()->toDateTimeString()
// output: 2018-04-07 12:10:00public function subDays(int $days = 1): Jalalian
$date = (new Jalalian(1397, 1, 18, 12, 10, 0))->subDays(10)->format('d')
// output: 08public function addHours(int $hours = 1): Jalalian
$date = (new Jalalian(1397, 1, 18, 12, 10, 0))->addHours(1)->format('H')
// output: 13public function subHours(int $hours = 1): Jalalian
$date = (new Jalalian(1397, 1, 18, 12, 10, 0))->subHours(1)->format('H')
// output: 11public function addMinutes(int $minutes = 1): Jalalian
$date = (new Jalalian(1397, 1, 18, 12, 10, 0))->addMinutes(10)->format('i')
// output: 22public function subMinutes(int $minutes = 1): Jalalian
$date = (new Jalalian(1397, 1, 18, 12, 10, 0))->subMinutes(10)->format('i')
// output: 02public function addSeconds(int $secs = 1): Jalalian
$date = (new Jalalian(1397, 1, 18, 12, 10, 0))->addSeconds(10)->format('s')
// output: 10public function subSeconds(int $secs = 1): Jalalian
$date = (new Jalalian(1397, 1, 18, 12, 10, 0))->subSeconds(10)->format('i:s')
// output: 11:40
public function equalsTo(Jalalian $other): bool
$date = (new Jalalian(1397, 1, 18, 12, 10, 0))->equalsTo(Jalalian::now())
// output: false
$date = Jalalian::now()->equalsTo(Jalalian::now())
// output: truepublic function equalsToCarbon(Carbon $carbon): bool
$date = Jalalian::now()->equalsToCarbon(Carbon::now())
// output: truepublic function greaterThan(Jalalian $other): bool
$date = Jalalian::now()->greaterThan(Jalalian::now()->subDays(1)))
// output: truepublic function greaterThanCarbon(Carbon $carbon): bool
$date = Jalalian::now()->greaterThanCarbon(Carbon::now()->subDays(1)))
// output: truepublic function lessThan(Jalalian $other): bool
$date = Jalalian::now()->lessThan(Jalalian::now()->addDays(1)))
// output: truepublic function lessThanCarbon(Carbon $carbon): bool
$date = Jalalian::now()->lessThanCarbon(Carbon::now()->addDays(1)))
// output: truepublic function greaterThanOrEqualsTo(Jalalian $other): bool
$date = Jalalian::now()->greaterThan(Jalalian::now()->subDays(1)))
// output: truepublic function greaterThanOrEqualsToCarbon(Carbon $carbon): bool
$date = Jalalian::now()->greaterThanOrEqualsToCarbon(Carbon::now()))
// output: truepublic function lessThanOrEqualsTo(Jalalian $other): bool
$date = Jalalian::now()->lessThanOrEqualsTo(Jalalian::now()))
// output: truepublic function lessThanOrEqualsToCarbon(Carbon $carbon): bool
$date = Jalalian::now()->lessThanOrEqualsToCarbon(Carbon::now()))
// output: truepublic function isStartOfWeek(): bool
$date = (new Jalalian(1397, 6, 24))->isStartOfWeek()
// output: truepublic function getEndDayOfYear(): bool
$date = (new Jalalian(1397, 6, 24))->getEndDayOfYear()
// output: 1397, 12, 29public function getFirstDayOfMonth(): bool
$date = (new Jalalian(1397, 6, 24))->getFirstDayOfMonth()
// output: 1397, 6, 1public function getEndDayOfMonth(): bool
$date = (new Jalalian(1397, 6, 24))->getEndDayOfMonth()
// output: 1397, 6, 30public function isSaturday(): bool
$date = (new Jalalian(1397, 6, 24))->isSaturday()
// output: truepublic function isDayOfWeek(int $day): bool
$date = (new Jalalian(1397, 6, 24))->isDayOfWeek(0)
// output: truepublic function isEndOfWeek(): bool
$date = (new Jalalian(1397, 6, 24))->isEndOfWeek()
// output: falsepublic function isFriday(): bool
$date = (new Jalalian(1397, 6, 24))->isFriday()
// output: falsepublic function isToday(): bool
$date = (new Jalalian(1397, 6, 24))->isToday()
// output: (!maybe) truepublic function isTomorrow(): bool
$date = (new Jalalian(1397, 6, 25))->isTomorrow()
// output: truepublic function isYesterday(): bool
$date = (new Jalalian(1397, 6, 23))->isYesterday()
// output: truepublic function isFuture(): bool
$date = (new Jalalian(1397, 6, 26))->isFuture()
// output: truepublic function isPast(): bool
$date = (new Jalalian(1397, 5, 24))->isPast()
// output: truepublic function toArray(): array
$date = (new Jalalian(1397, 6, 24))->toArray()
// output: (
// [year] => 1397
// [month] => 6
// [day] => 24
// [dayOfWeek] => 0
// [dayOfYear] => 179
// [hour] => 0
// [minute] => 0
// [second] => 0
// [micro] => 0
// [timestamp] => 1536969600
// [formatted] => 1397-06-24 00:00:00
// [timezone] =>
// )public function getDayOfWeek(): int
$date = (new Jalalian(1397, 5, 24))->getDayOfWeek()
// output: 0public function isSunday(): bool
$date = (new Jalalian(1397, 6, 24))->isSunday()
// output: falsepublic function isMonday(): bool
$date = (new Jalalian(1397, 6, 26))->isMonday()
// output: truepublic function isTuesday(): bool
$date = (new Jalalian(1397, 6, 24))->isTuesday()
// output: falsepublic function isWednesday(): bool
$date = (new Jalalian(1397, 6, 24))->isWednesday()
// output: falsepublic function isThursday(): bool
$date = (new Jalalian(1397, 6, 22))->isThursday()
// output: truepublic function getDayOfYear(): int
$date = (new Jalalian(1397, 5, 24))->getDayOfYear()
// output: 179public function toString(): string
$date = (new Jalalian(1397, 5, 24))->isPast()
// output: 1397-05-24 00:00:00public function format(string $format): string
$date = (new Jalalian(1397, 5, 24))->format('y')
// output: 1397
// see php date formatspublic function __toString(): string
// Alias of toString()public function ago(): stringpublic function getTimestamp(): intpublic function getNextWeek(): Jalalianpublic function getNextMonth(): Jalalian// Check jalali date
\Morilog\Jalali\CalendarUtils::checkDate(1391, 2, 30, true); // true
// Check jalali date
\Morilog\Jalali\CalendarUtils::checkDate(2016, 5, 7); // false
// Check gregorian date
\Morilog\Jalali\CalendarUtils::checkDate(2016, 5, 7, false); // true\Morilog\Jalali\CalendarUtils::toJalali(2016, 5, 7); // [1395, 2, 18]\Morilog\Jalali\CalendarUtils::toGregorian(1395, 2, 18); // [2016, 5, 7]CalendarUtils::strftime('Y-m-d', strtotime('2016-05-8')); // 1395-02-19$Jalalian = '1394/11/25 15:00:00';
// get instance of \DateTime
$dateTime = \Morilog\Jalali\CalendarUtils::createDatetimeFromFormat('Y/m/d H:i:s', $Jalalian);$Jalalian = '1394/11/25 15:00:00';
// get instance of \Carbon\Carbon
$carbon = \Morilog\Jalali\CalendarUtils::createCarbonFromFormat('Y/m/d H:i:s', $Jalalian);// convert latin to persian
$date = \Morilog\Jalali\CalendarUtils::strftime('Y-m-d', strtotime('2016-05-8')); // 1395-02-19
\Morilog\Jalali\CalendarUtils::convertNumbers($date); // ۱۳۹۵-۰۲-۱۹
// convert persian to latin
$dateString = \Morilog\Jalali\CalendarUtils::convertNumbers('۱۳۹۵-۰۲-۱۹', true); // 1395-02-19
\Morilog\Jalali\CalendarUtils::createCarbonFromFormat('Y-m-d', $dateString)->format('Y-m-d'); //2016-05-8You can convert date/time to briannesbitt/carbon, thus being able to use it's API to work with PHP DateTime class.
Difference in months:
// convert persian to Carbon
$date = \Morilog\Jalali\Jalalian::fromFormat('Y-m-d', "1395-02-19")->toCarbon();
// ->toString() => Sun May 08 2016 00:00:00 GMT+0000
// Add 4 months to Carbon
$dateAdd4Months = $date->addMonths(4);
// Difference in months
$dateAdd4Months->DiffInMonths($date); //4
$dateAdd4Months->floatDiffInMonths($date); //4.0For help in building your formats, checkout the PHP strftime() docs.
The class relies on strtotime() to make sense of your strings, and strftime() to handle the formatting. Always check the time() output to see if you get false timestamps, it which case, means the class couldn't understand what you were asking it to do.
- This bundle is created based on Laravel-Date by Scott Travis (MIT Licensed).
- Jalali (Shamsi) DateTime class included in the package is created by Sallar Kaboli and is released under the MIT License.
- This package is created and modified by Morteza Parvini for Laravel >= 5 and is released under the MIT License.