ariaieboy/jalali

此包帮助开发者在PHP应用中轻松处理贾拉利(沙姆斯或伊朗)日期,基于贾拉利(沙姆斯)DateTime类。

1.0.0 2024-03-03 15:18 UTC

This package is auto-updated.

Last update: 2024-09-23 20:12:52 UTC


README

Latest Version on Packagist Tests PHPSTAN Total Downloads

与morilog/jalali的差异

  • 自动化测试
  • PHPStan第9级检查
  • Carbon 3支持
  • 仅依赖于Carbon

安装

您可以通过composer安装此包

composer require ariaieboy/jalali

基本用法

您可以使用Jalali类来操作贾拉利日期时间

Jalali

您可以使用jdate()助手代替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 دقیقه پیش

方法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差异

您可以将日期/时间转换为briannesbitt/carbon,从而能够使用其API与PHP DateTime类一起工作。

月份差异
// 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

格式化

有关构建格式的帮助,请参阅PHP strftime()文档

注意

该类依赖于strtotime()来理解您的字符串,并依赖于strftime()来处理格式。始终检查time()输出,以查看是否得到无效的时间戳,如果是,则表示该类无法理解您所要求的内容。

变更日志

请参阅CHANGELOG以获取有关最近更改的更多信息。

贡献

请参阅CONTRIBUTING以获取详细信息。

安全漏洞

请参阅我们关于如何报告安全漏洞的安全策略

致谢

许可证

MIT许可证(MIT)。有关更多信息,请参阅许可证文件