8000 GitHub - ariaieboy/jalali: This Package helps developers to easily work with Jalali (Shamsi or Iranian) dates in php appliations, based on Jalali (Shamsi) DateTime class.
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

This Package helps developers to easily work with Jalali (Shamsi or Iranian) dates in php appliations, based on Jalali (Shamsi) DateTime class.

License

Notifications You must be signed in to change notification settings

ariaieboy/jalali

Repository files navigation

Ariaieboy/jalai

Latest Version on Packagist Tests PHPSTAN Total Downloads

Difference with morilog/jalali

  • Automated testing
  • Level 9 PHPStan check
  • Carbon 3 support
  • Only dependant on Carbon

Installation

You can install the package via composer:

composer require ariaieboy/jalali

Basic Usage

You can use Jalali class for manipulating Jalali date time

Jalali

You can use jdate() helper instead of Jalali::forge();

now([$timestamp = null])

// the default timestamp is Now
$date = \Ariaieboy\Jalali\Jalali::now()
// OR
$date = jdate();

// pass timestamps
$date = Jalali::forge(1333857600);
// OR
$date = jdate(1333857600);

// pass human readable strings to make timestamps
$date = Jalali::forge('last sunday');

// get the timestamp
$date = Jalali::forge('last sunday')->getTimestamp(); // 1333857600

// format the timestamp
$date = Jalali::forge('last sunday')->format('%B %d، %Y'); // دی 02، 1391
$date = Jalali::forge('today')->format('%A, %d %B %y'); // جمعه، 23 اسفند 97

// get a predefined format
$date = Jalali::forge('last sunday')->format('datetime'); // 1391-10-02 00:00:00
$date = Jalali::forge('last sunday')->format('date'); // 1391-10-02
$date = Jalali::forge('last sunday')->format('time'); // 00:00:00

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

Methods api


public static function now(\DateTimeZone|null $timeZone = null): Jalali

$jDate = Jalali::now();

public static function fromCarbon(Carbon $carbon): Jalali

$jDate = Jalali::fromCarbon(Carbon::now());

public static function fromFormat(string $format, string $timestamp, \DateTimeZone|null $timeZone = null): Jalali 

$jDate = Jalali::fromFormat('Y-m-d H:i:s', '1397-01-18 12:00:40');

public static function forge(string|DateTimeInterface $timestamp, DateTimeZone|null $timeZone = null): Jalali

// Alias fo fromDatetime

public static function fromDateTime(string|DateTimeInterface $dateTime, \DateTimeZone|null $timeZone = null): Jalali

$jDate = Jalali::fromDateTime(Carbon::now())
// OR 
$jDate = Jalali::fromDateTime(new \DateTime());
// OR
$jDate = Jalali::fromDateTime('yesterday');

public function getMonthDays(): int

$date = (new Jalali(1397, 1, 18))->getMonthDays() 
// output: 31

public function getMonth(): int

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

public function isLeapYear(): bool

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

public function getYear(): int

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

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

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

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

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

public function getDay(): int

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

public function getHour(): int

$date = (new Jalali(1397, 1, 18, 12, 0, 0))->getHour() 
// output: 12

public function getMinute(): int

$date = (new Jalali(1397, 1, 18, 12, 10, 0))->getMinute() 
// output: 10

public function getSecond(): int

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

public function getTimezone(): \DateTimeZone|null

// Get current timezone

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

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

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

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

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

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

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

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

public function toCarbon(): Carbon

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

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

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

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

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

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

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

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

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

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

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

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

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

public function subSeconds(int $secs = 1): Jalali

$date = (new Jalali(1397, 1, 18, 12, 10, 0))->subSeconds(10)->format('i:s') 
// output: 11:40

public function equalsTo(Jalali $other): bool

$date = (new Jalali(1397, 1, 18, 12, 10, 0))->equalsTo(Jalali::now()) 
// output: false

$date = Jalali::now()->equalsTo(Jalali::now()) 
// output: true

public function equalsToCarbon(Carbon $carbon): bool

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

public function greaterThan(Jalali $other): bool

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

public function greaterThanCarbon(Carbon $carbon): bool

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

public function lessThan(Jalali $other): bool

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

public function lessThanCarbon(Carbon $carbon): bool

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

public function greaterThanOrEqualsTo(Jalali $other): bool

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

public function greaterThanOrEqualsToCarbon(Carbon $carbon): bool

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

public function lessThanOrEqualsTo(Jalali $other): bool

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

public function lessThanOrEqualsToCarbon(Carbon $carbon): bool

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

public function isStartOfWeek(): bool

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

public function isSaturday(): bool

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

public function isDayOfWeek(int $day): bool

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

public function isEndOfWeek(): bool

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

public function isFriday(): bool

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

public function isToday(): bool

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

public function isTomorrow(): bool

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

public function isYesterday(): bool

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

public function isFuture(): bool

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

public function isPast(): bool

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

public function toArray(): array
$date = (new Jalali(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 Jalali(1397, 5, 24))->getDayOfWeek()
// output: 0

public function isSunday(): bool

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

public function isMonday(): bool

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

public function isTuesday(): bool

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

public function isWednesday(): bool

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

public function isThursday(): bool

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

public function getDayOfYear(): int

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

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

public function format(string $format): string

$date = (new Jalali(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(): Jalali

public function getNextMonth(): Jalali

CalendarUtils


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

// Check jalali date
\Ariaieboy\Jalali\CalendarUtils::checkDate(1391, 2, 30, true); // true

// Check jalali date
\Ariaieboy\Jalali\CalendarUtils::checkDate(2016, 5, 7); // false

// Check gregorian date
\Ariaieboy\Jalali\CalendarUtils::checkDate(2016, 5, 7, false); // true

toJalali($gYear, $gMonth, $gDay)

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

toGregorian($jYear, $jMonth, $jDay)

\Ariaieboy\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)

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

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

createCarbonFromFormat($format, $jalaiTimeString)

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

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

convertNumbers($string)

// convert latin to persian
$date = \Ariaieboy\Jalali\CalendarUtils::strftime('Y-m-d', strtotime('2016-05-8')); // 1395-02-19
\Ariaieboy\Jalali\CalendarUtils::convertNumbers($date); // ۱۳۹۵-۰۲-۱۹

// convert persian to latin
$dateString = \Ariaieboy\Jalali\CalendarUtils::convertNumbers('۱۳۹۵-۰۲-۱۹', true); // 1395-02-19
\Ariaieboy\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.

Difference in months:
// convert persian to Carbon
$date = \Ariaieboy\Jalali\Jalali::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.

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.

Changelog

Please see CHANGELOG for more information on what has changed recently.

Contributing

Please see CONTRIBUTING for details.

Security Vulnerabilities

Please review our security policy on how to report security vulnerabilities.

Credits

License

The MIT License (MIT). Please see License File for more information.

About

This Package helps developers to easily work with Jalali (Shamsi or Iranian) dates in php appliations, based on Jalali (Shamsi) DateTime class.

Resources

License

Stars

Watchers

Forks

Sponsor this project

Packages

No packages published

Contributors 3

  •  
  •  
  •  

Languages

0