2017 © Pedro Peláez
 

library jalali

eThis Package helps developers to easily work with Jalali (Shamsi or Iranian) dates in Laravel 5 applications, based on Jalali (Shamsi) DateTime class.

image

morilog/jalali

eThis Package helps developers to easily work with Jalali (Shamsi or Iranian) dates in Laravel 5 applications, based on Jalali (Shamsi) DateTime class.

  • Monday, July 2, 2018
  • by morilog
  • Repository
  • 8 Watchers
  • 192 Stars
  • 49,284 Installations
  • PHP
  • 6 Dependents
  • 0 Suggesters
  • 42 Forks
  • 8 Open issues
  • 11 Versions
  • 17 % Grown

The README.md

Build Status, (*1)

morilog/jalali

Version 3 features

  • High human readable API
  • DateTime manipulating API
  • DateTime comparing API
  • Immutable

Installation Version 3.*

If you are using version <= 2.*, please read old docs, (*5)

Requirements:

  • php >= 7.0

Run the Composer update command, (*6)

$ composer require morilog/jalali:3.*

, (*7)

Basic Usage

In the current version, I introduced Jalalian class for manipulating Jalali date time, (*8)

Jalalian

In version >= 1.1, you can use jdate() instead of Jalalian::forge();, (*9)

now([$timestamp = null])

``` php // the default timestamp is Now $date = \Morilog\Jalali\Jalalian::now() // OR $date = jdate();, (*10)

// pass timestamps $date = Jalalian::forge(1333857600); // OR $date = jdate(1333857600);, (*11)

// pass human readable strings to make timestamps $date = Jalalian::forge('last sunday');, (*12)

// get the timestamp $date = Jalalian::forge('last sunday')->getTimestamp(); // 1333857600, (*13)

// 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, (*14)

// 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, (*15)

// get relative 'ago' format $date = Jalalian::forge('now - 10 minutes')->ago() // 10 دقیقه پیش, (*16)


#### Methods api --- ```php 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 fromDatetime

public 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: 31

public function getMonth(): int

$date = (new Jalalian(1397, 1, 18))->getMonth() 
// output: 1

public function isLeapYear(): bool

$date = (new Jalalian(1397, 1, 18))->isLeapYear() 
// output: false


public function getYear(): int

$date = (new Jalalian(1397, 1, 18))->getYear() 
// output: 1397

public function subMonths(int $months = 1): Jalalian

$date = (new Jalalian(1397, 1, 18))->subMonths(1)->toString() 
// output: 1396-12-18 00:00:00


public function subYears(int $years = 1): Jalalian

$date = (new Jalalian(1397, 1, 18))->subYears(1)->toString()
// output: 1396-01-18 00:00:00

public function getDay(): int

$date = (new Jalalian(1397, 1, 18))->getDay() 
// output: 18


public 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: 10


public function getSecond(): int

$date = (new Jalalian(1397, 1, 18, 12, 10, 45))->getSecond() 
// output: 45

public function getTimezone(): \DateTimeZone

// Get current timezone

public function addMonths(int $months = 1): Jalalian

$date = (new Jalalian(1397, 1, 18, 12, 10, 0))->addMonths(1)->format('m') 
// output: 02


public function addYears(int $years = 1): Jalalian

$date = (new Jalalian(1397, 1, 18, 12, 10, 0))->addYears(1)->format('Y') 
// output: 1398


public function getDaysOf(int $monthNumber = 1): int

$date = (new Jalalian(1397, 1, 18, 12, 10, 0))->getDaysOf(1) 
// output: 31

public function addDays(int $days = 1): Jalalian

$date = (new Jalalian(1397, 1, 18, 12, 10, 0))->addDays(1)->format('d') 
// output: 18


public function toCarbon(): Carbon

$date = (new Jalalian(1397, 1, 18, 12, 10, 0))->toCarbon()->toDateTimeString() 
// output: 2018-04-07 12:10:00

public function subDays(int $days = 1): Jalalian

$date = (new Jalalian(1397, 1, 18, 12, 10, 0))->subDays(10)->format('d') 
// output: 08

public function addHours(int $hours = 1): Jalalian

$date = (new Jalalian(1397, 1, 18, 12, 10, 0))->addHours(1)->format('H') 
// output: 13


public function subHours(int $hours = 1): Jalalian

$date = (new Jalalian(1397, 1, 18, 12, 10, 0))->subHours(1)->format('H') 
// output: 11


public function addMinutes(int $minutes = 1): Jalalian

$date = (new Jalalian(1397, 1, 18, 12, 10, 0))->addMinutes(10)->format('i') 
// output: 22


public function subMinutes(int $minutes = 1): Jalalian

$date = (new Jalalian(1397, 1, 18, 12, 10, 0))->subMinutes(10)->format('i') 
// output: 02


public function addSeconds(int $secs = 1): Jalalian

$date = (new Jalalian(1397, 1, 18, 12, 10, 0))->addSeconds(10)->format('s') 
// output: 10


public 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: true


public function equalsToCarbon(Carbon $carbon): bool

$date = Jalalian::now()->equalsToCarbon(Carbon::now())  
// output: true

public function greaterThan(Jalalian $other): bool

$date = Jalalian::now()->greaterThan(Jalalian::now()->subDays(1)))  
// output: true

public function greaterThanCarbon(Carbon $carbon): bool

$date = Jalalian::now()->greaterThanCarbon(Carbon::now()->subDays(1)))  
// output: true


public function lessThan(Jalalian $other): bool

$date = Jalalian::now()->lessThan(Jalalian::now()->addDays(1)))  
// output: true


public function lessThanCarbon(Carbon $carbon): bool

$date = Jalalian::now()->lessThanCarbon(Carbon::now()->addDays(1)))  
// output: true


public function greaterThanOrEqualsTo(Jalalian $other): bool

$date = Jalalian::now()->greaterThan(Jalalian::now()->subDays(1)))  
// output: true


public function greaterThanOrEqualsToCarbon(Carbon $carbon): bool

$date = Jalalian::now()->greaterThanOrEqualsToCarbon(Carbon::now()))  
// output: true


public function lessThanOrEqualsTo(Jalalian $other): bool

$date = Jalalian::now()->lessThanOrEqualsTo(Jalalian::now()))  
// output: true


public function lessThanOrEqualsToCarbon(Carbon $carbon): bool

$date = Jalalian::now()->lessThanOrEqualsToCarbon(Carbon::now()))  
// output: true


public function isStartOfWeek(): bool

$date = (new Jalalian(1397, 6, 24))->isStartOfWeek()
// output: true


public function getEndDayOfYear(): bool

$date = (new Jalalian(1397, 6, 24))->getEndDayOfYear()
// output: 1397, 12, 29


public function getFirstDayOfMonth(): bool

$date = (new Jalalian(1397, 6, 24))->getEndDayOfYear()
// output: 1397, 6, 1


public function getEndDayOfMonth(): bool

$date = (new Jalalian(1397, 6, 24))->getEndDayOfMonth()
// output: 1397, 6, 31


public function isSaturday(): bool

$date = (new Jalalian(1397, 6, 24))->isSaturday()
// output: true


public function isDayOfWeek(int $day): bool

$date = (new Jalalian(1397, 6, 24))->isDayOfWeek(0)
// output: true


public function isEndOfWeek(): bool

$date = (new Jalalian(1397, 6, 24))->isEndOfWeek()
// output: false


public function isFriday(): bool

$date = (new Jalalian(1397, 6, 24))->isFriday()
// output: false


public function isToday(): bool

$date = (new Jalalian(1397, 6, 24))->isToday()
// output: (!maybe) true


public function isTomorrow(): bool

$date = (new Jalalian(1397, 6, 25))->isTomorrow()
// output: true


public function isYesterday(): bool

$date = (new Jalalian(1397, 6, 23))->isYesterday()
// output: true


public function isFuture(): bool

$date = (new Jalalian(1397, 6, 26))->isFuture()
// output: true


public function isPast(): bool

$date = (new Jalalian(1397, 5, 24))->isPast()
// output: true


public 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: 0


public function isSunday(): bool

$date = (new Jalalian(1397, 6, 24))->isSunday()
// output: false


public function isMonday(): bool

$date = (new Jalalian(1397, 6, 26))->isMonday()
// output: true


public function isTuesday(): bool

$date = (new Jalalian(1397, 6, 24))->isTuesday()
// output: false


public function isWednesday(): bool

$date = (new Jalalian(1397, 6, 24))->isWednesday()
// output: false


public function isThursday(): bool

$date = (new Jalalian(1397, 6, 22))->isThursday()
// output: true


public function getDayOfYear(): int

$date = (new Jalalian(1397, 5, 24))->getDayOfYear()
// output: 179


public function toString(): string
$date = (new Jalalian(1397, 5, 24))->toString()
// output: 1397-05-24 00:00:00


public function format(string $format): string

$date = (new Jalalian(1397, 5, 24))->format('y')
// output: 1397
// see php date formats


public function __toString(): string

// Alias of toString()

public function ago(): string


public function getTimestamp(): int


public function getNextWeek(): Jalalian


public function getNextMonth(): Jalalian


public function diff(Jalalian $ref): array
$diff = (new Jalalian(1397, 5, 24))->diff(new Jalalian(1398, 6, 30));
// output: [1, 1, 6]

### CalendarUtils

checkDate($year, $month, $day, [$isJalali = true])

// 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

toJalali($gYear, $gMonth, $gDay)

\Morilog\Jalali\CalendarUtils::toJalali(2016, 5, 7); // [1395, 2, 18]

toGregorian($jYear, $jMonth, $jDay)

\Morilog\Jalali\CalendarUtils::toGregorian(1395, 2, 18); // [2016, 5, 7]

strftime($format, [$timestamp = false, $timezone = null])

CalendarUtils::strftime('Y-m-d', strtotime('2016-05-8')); // 1395-02-19

createDateTimeFromFormat($format, $jalaiTimeString)

$Jalalian = '1394/11/25 15:00:00';

// get instance of \DateTime
$dateTime = \Morilog\Jalali\CalendarUtils::createDatetimeFromFormat('Y/m/d H:i:s', $Jalalian);


createCarbonFromFormat($format, $jalaiTimeString)

$Jalalian = '1394/11/25 15:00:00';

// get instance of \Carbon\Carbon
$carbon = \Morilog\Jalali\CalendarUtils::createCarbonFromFormat('Y/m/d H:i:s', $Jalalian);


convertNumbers($string)

// 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-8

Carbon api-difference

You can convert date/time to briannesbitt/carbon, thus being able to use it's API to work with PHP DateTime class., (*17)

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.0

Formatting

For help in building your formats, checkout the PHP strftime() docs., (*18)

Notes

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., (*19)

License

The Versions

02/07 2018

dev-master

9999999-dev

eThis Package helps developers to easily work with Jalali (Shamsi or Iranian) dates in Laravel 5 applications, based on Jalali (Shamsi) DateTime class.

  Sources   Download

MIT

The Requires

 

The Development Requires

by Morteza Parvini
by Milad Rey

laravel date datetime jalali morilog

06/09 2017

v2.3.0

2.3.0.0

eThis Package helps developers to easily work with Jalali (Shamsi or Iranian) dates in Laravel 5 applications, based on Jalali (Shamsi) DateTime class.

  Sources   Download

MIT

The Requires

 

The Development Requires

by Morteza Parvini
by Milad Rey

laravel date datetime jalali morilog

24/06 2016

v2.2.0

2.2.0.0

eThis Package helps developers to easily work with Jalali (Shamsi or Iranian) dates in Laravel 5 applications, based on Jalali (Shamsi) DateTime class.

  Sources   Download

MIT

The Requires

 

The Development Requires

by Morteza Parvini
by Milad Rey

laravel date datetime jalali morilog

22/06 2016

v2.1.0

2.1.0.0

eThis Package helps developers to easily work with Jalali (Shamsi or Iranian) dates in Laravel 5 applications, based on Jalali (Shamsi) DateTime class.

  Sources   Download

MIT

The Requires

 

The Development Requires

by Morteza Parvini
by Milad Rey

laravel date datetime jalali morilog

04/06 2016

v2.0.1

2.0.1.0

eThis Package helps developers to easily work with Jalali (Shamsi or Iranian) dates in Laravel 5 applications, based on Jalali (Shamsi) DateTime class.

  Sources   Download

MIT

The Requires

 

The Development Requires

by Morteza Parvini
by Milad Rey

laravel date datetime jalali morilog

08/05 2016

v2.0

2.0.0.0

eThis Package helps developers to easily work with Jalali (Shamsi or Iranian) dates in Laravel 5 applications, based on Jalali (Shamsi) DateTime class.

  Sources   Download

MIT

The Requires

 

The Development Requires

by Morteza Parvini
by Milad Rey

laravel date datetime jalali morilog

14/02 2016

v1.1

1.1.0.0

eThis Package helps developers to easily work with Jalali (Shamsi or Iranian) dates in Laravel 5 applications, based on Jalali (Shamsi) DateTime class.

  Sources   Download

MIT

The Requires

 

The Development Requires

by Morteza Parvini
by Milad Rey

laravel date datetime jalali morilog

09/02 2016

dev-develop

dev-develop

This Package helps developers to easily work with Jalali (Shamsi or Iranian) dates in Laravel 4 applications, based on Jalali (Shamsi) DateTime class. This Package is based on a Laravel 3 bundle sallar/laravel-jdate by Sallar Kaboli.

  Sources   Download

MIT

The Requires

 

The Development Requires

by Morteza Parvini
by Milad Rey

laravel date datetime jalali morilog

08/10 2015

v1.0.1

1.0.1.0

eThis Package helps developers to easily work with Jalali (Shamsi or Iranian) dates in Laravel 5 applications, based on Jalali (Shamsi) DateTime class.

  Sources   Download

MIT

The Requires

 

The Development Requires

by Morteza Parvini
by Milad Rey

laravel date datetime jalali morilog

12/07 2015

v1.0

1.0.0.0

This Package helps developers to easily work with Jalali (Shamsi or Iranian) dates in Laravel 4 applications, based on Jalali (Shamsi) DateTime class. This Package is based on a Laravel 3 bundle sallar/laravel-jdate by Sallar Kaboli.

  Sources   Download

MIT

The Requires

 

The Development Requires

by Morteza Parvini
by Milad Rey

laravel date datetime jalali morilog

10/06 2015

v0.1

0.1.0.0

This Package helps developers to easily work with Jalali (Shamsi or Iranian) dates in Laravel 4 applications, based on Jalali (Shamsi) DateTime class. This Package is based on a Laravel 3 bundle sallar/laravel-jdate by Sallar Kaboli.

  Sources   Download

MIT

The Requires

 

The Development Requires

by Morteza Parvini
by Milad Rey

laravel date datetime jalali morilog