public function subSeconds(int $secs = 1): Jalalian { return static::fromCarbon($this->toCarbon()->subSeconds($secs)); } public function equalsTo(Jalalian $other): bool { return $this->equalsToCarbon($other->toCarbon()); } public function equalsToCarbon(Carbon $carbon): bool { return $this->toCarbon()->equalTo($carbon); } public function greaterThan(Jalalian $other): bool { return $this->greaterThanCarbon($other->toCarbon()); } public function greaterThanCarbon(Carbon $carbon): bool { return $this->toCarbon()->greaterThan($carbon); } public function lessThan(Jalalian $other): bool { return $this->lessThanCarbon($other->toCarbon()); } public function lessThanCarbon(Carbon $carbon): bool { return $this->toCarbon()->lessThan($carbon); } public function greaterThanOrEqualsTo(Jalalian $other): bool { return $this->greaterThanOrEqualsToCarbon($other->toCarbon()); } public function greaterThanOrEqualsToCarbon(Carbon $carbon): bool { return $this->toCarbon()->greaterThanOrEqualTo($carbon); } public function lessThanOrEqualsTo(Jalalian $other): bool { return $this->lessThanOrEqualsToCarbon($other->toCarbon()); } public function lessThanOrEqualsToCarbon(Carbon $carbon): bool { return $this->toCarbon()->lessThanOrEqualTo($carbon); } public function isStartOfWeek(): bool { return $this->isSaturday(); } public function isSaturday(): bool { return $this->isDayOfWeek(Carbon::SATURDAY); } public function isDayOfWeek(int $day): bool { Assertion::between($day, 0, 6); return $this->toCarbon()->isDayOfWeek($day); } public function isEndOfWeek(): bool { return $this->isFriday(); } public function isFriday(): bool { return $this->isDayOfWeek(Carbon::FRIDAY); } public function isToday(): bool { return $this->toCarbon()->isToday(); } public function isTomorrow(): bool { return $this->toCarbon()->isTomorrow(); } public function isYesterday(): bool { return $this->toCarbon()->isYesterday(); } public function isFuture(): bool { return $this->toCarbon()->isFuture(); } public function isPast(): bool { return $this->toCarbon()->isPast(); } public function toArray(): array { return [ 'year' => $this->year, 'month' => $this->month, 'day' => $this->day, 'dayOfWeek' => $this->getDayOfWeek(), 'dayOfYear' => $this->getDayOfYear(), 'hour' => $this->hour, 'minute' => $this->minute, 'second' => $this->second, 'micro' => $this->toCarbon()->micro, 'timestamp' => $this->toCarbon()->timestamp, 'formatted' => $this->toString(), 'timezone' => $this->timezone, ]; } public function getDayOfWeek(): int { if ($this->isSaturday()) { return 0; } if ($this->isSunday()) { return 1; } if ($this->isMonday()) { return 2; } if ($this->isTuesday()) { return 3; } if ($this->isWednesday()) { return 4; } if ($this->isThursday()) { return 5; } return 6; } public function isSunday(): bool { return $this->isDayOfWeek(Carbon::SUNDAY); } public function isMonday(): bool { return $this->isDayOfWeek(Carbon::MONDAY); } public function isTuesday(): bool { return $this->isDayOfWeek(Carbon::TUESDAY); } public function isWednesday(): bool { return $this->isDayOfWeek(Carbon::WEDNESDAY); } public function isThursday(): bool { return $this->isDayOfWeek(Carbon::THURSDAY); } public function getDayOfYear(): int { $dayOfYear = 0; for ($m = 1; $m < $this->getMonth(); $m++) { if ($m <= 6) { $dayOfYear += 31; continue; } if ($m < 12) { $dayOfYear += 30; continue; } } return $dayOfYear + $this->getDay(); } public function toString(): string { return $this->format('Y-m-d H:i:s'); } public function format(string $format): string { return CalendarUtils::strftime($format, $this->toCarbon()); } public function __toString(): string { return $this->toString(); } public function ago(): string { $now = time(); $time = $this->getTimestamp(); // catch error if (!$time) { return false; } // build period and length arrays $periods = ['ثانیه', 'دقیقه', 'ساعت', 'روز', 'هفته', 'ماه', 'سال', 'قرن']; $lengths = [60, 60, 24, 7, 4.35, 12, 10]; // get difference $difference = $now - $time; // set descriptor if ($difference < 0) { $difference = abs($difference); // absolute value $negative = true; } // do math for ($j = 0; $difference >= $lengths[$j] and $j < count($lengths) - 1; $j++) { $difference /= $lengths[$j]; } // round difference $difference = intval(round($difference)); // return return number_format($difference) . ' ' . $periods[$j] . ' ' . (isset($negative) ? '' : 'پیش'); } public function getTimestamp(): int { return $this->toCarbon()->getTimestamp(); } public function getNextWeek(): Jalalian { return $this->addDays(7); } public function addDays(int $days = 1): Jalalian { return static::fromCarbon($this->toCarbon()->addDays($days)); } public function getNextMonth(): Jalalian { return $this->addMonths(1); } }