File "Date.php"

Full Path: /home/warrior1/public_html/wp-content/plugins/mailpoet/vendor-prefixed/nesbot/carbon/src/Carbon/Traits/Date.php
File size: 113.71 KB
MIME-type: text/x-php
Charset: utf-8

<?php
/**
 * This file is part of the Carbon package.
 *
 * (c) Brian Nesbitt <brian@nesbot.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */
namespace MailPoetVendor\Carbon\Traits;
if (!defined('ABSPATH')) exit;
use BadMethodCallException;
use MailPoetVendor\Carbon\Carbon;
use MailPoetVendor\Carbon\CarbonInterface;
use MailPoetVendor\Carbon\CarbonPeriod;
use MailPoetVendor\Carbon\CarbonTimeZone;
use MailPoetVendor\Carbon\Exceptions\BadComparisonUnitException;
use MailPoetVendor\Carbon\Exceptions\ImmutableException;
use MailPoetVendor\Carbon\Exceptions\InvalidTimeZoneException;
use MailPoetVendor\Carbon\Exceptions\InvalidTypeException;
use MailPoetVendor\Carbon\Exceptions\UnknownGetterException;
use MailPoetVendor\Carbon\Exceptions\UnknownMethodException;
use MailPoetVendor\Carbon\Exceptions\UnknownSetterException;
use MailPoetVendor\Carbon\Exceptions\UnknownUnitException;
use Closure;
use DateInterval;
use DatePeriod;
use DateTime;
use DateTimeImmutable;
use DateTimeInterface;
use DateTimeZone;
use InvalidArgumentException;
use ReflectionException;
use ReturnTypeWillChange;
use Throwable;
/**
 * A simple API extension for DateTime.
 *
 * 
 *
 * <autodoc generated by `composer phpdoc`>
 *
 * @property int $year
 * @property int $yearIso
 * @property int $month
 * @property int $day
 * @property int $hour
 * @property int $minute
 * @property int $second
 * @property int $micro
 * @property int $microsecond
 * @property int|float|string $timestamp seconds since the Unix Epoch
 * @property string $englishDayOfWeek the day of week in English
 * @property string $shortEnglishDayOfWeek the abbreviated day of week in English
 * @property string $englishMonth the month in English
 * @property string $shortEnglishMonth the abbreviated month in English
 * @property int $milliseconds
 * @property int $millisecond
 * @property int $milli
 * @property int $week 1 through 53
 * @property int $isoWeek 1 through 53
 * @property int $weekYear year according to week format
 * @property int $isoWeekYear year according to ISO week format
 * @property int $dayOfYear 1 through 366
 * @property int $age does a diffInYears() with default parameters
 * @property int $offset the timezone offset in seconds from UTC
 * @property int $offsetMinutes the timezone offset in minutes from UTC
 * @property int $offsetHours the timezone offset in hours from UTC
 * @property CarbonTimeZone $timezone the current timezone
 * @property CarbonTimeZone $tz alias of $timezone
 * @property-read int $dayOfWeek 0 (for Sunday) through 6 (for Saturday)
 * @property-read int $dayOfWeekIso 1 (for Monday) through 7 (for Sunday)
 * @property-read int $weekOfYear ISO-8601 week number of year, weeks starting on Monday
 * @property-read int $daysInMonth number of days in the given month
 * @property-read string $latinMeridiem "am"/"pm" (Ante meridiem or Post meridiem latin lowercase mark)
 * @property-read string $latinUpperMeridiem "AM"/"PM" (Ante meridiem or Post meridiem latin uppercase mark)
 * @property-read string $timezoneAbbreviatedName the current timezone abbreviated name
 * @property-read string $tzAbbrName alias of $timezoneAbbreviatedName
 * @property-read string $dayName long name of weekday translated according to Carbon locale, in english if no translation available for current language
 * @property-read string $shortDayName short name of weekday translated according to Carbon locale, in english if no translation available for current language
 * @property-read string $minDayName very short name of weekday translated according to Carbon locale, in english if no translation available for current language
 * @property-read string $monthName long name of month translated according to Carbon locale, in english if no translation available for current language
 * @property-read string $shortMonthName short name of month translated according to Carbon locale, in english if no translation available for current language
 * @property-read string $meridiem lowercase meridiem mark translated according to Carbon locale, in latin if no translation available for current language
 * @property-read string $upperMeridiem uppercase meridiem mark translated according to Carbon locale, in latin if no translation available for current language
 * @property-read int $noZeroHour current hour from 1 to 24
 * @property-read int $weeksInYear 51 through 53
 * @property-read int $isoWeeksInYear 51 through 53
 * @property-read int $weekOfMonth 1 through 5
 * @property-read int $weekNumberInMonth 1 through 5
 * @property-read int $firstWeekDay 0 through 6
 * @property-read int $lastWeekDay 0 through 6
 * @property-read int $daysInYear 365 or 366
 * @property-read int $quarter the quarter of this instance, 1 - 4
 * @property-read int $decade the decade of this instance
 * @property-read int $century the century of this instance
 * @property-read int $millennium the millennium of this instance
 * @property-read bool $dst daylight savings time indicator, true if DST, false otherwise
 * @property-read bool $local checks if the timezone is local, true if local, false otherwise
 * @property-read bool $utc checks if the timezone is UTC, true if UTC, false otherwise
 * @property-read string $timezoneName the current timezone name
 * @property-read string $tzName alias of $timezoneName
 * @property-read string $locale locale of the current instance
 *
 * @method bool isUtc() Check if the current instance has UTC timezone. (Both isUtc and isUTC cases are valid.)
 * @method bool isLocal() Check if the current instance has non-UTC timezone.
 * @method bool isValid() Check if the current instance is a valid date.
 * @method bool isDST() Check if the current instance is in a daylight saving time.
 * @method bool isSunday() Checks if the instance day is sunday.
 * @method bool isMonday() Checks if the instance day is monday.
 * @method bool isTuesday() Checks if the instance day is tuesday.
 * @method bool isWednesday() Checks if the instance day is wednesday.
 * @method bool isThursday() Checks if the instance day is thursday.
 * @method bool isFriday() Checks if the instance day is friday.
 * @method bool isSaturday() Checks if the instance day is saturday.
 * @method bool isSameYear(Carbon|DateTimeInterface|string|null $date = null) Checks if the given date is in the same year as the instance. If null passed, compare to now (with the same timezone).
 * @method bool isCurrentYear() Checks if the instance is in the same year as the current moment.
 * @method bool isNextYear() Checks if the instance is in the same year as the current moment next year.
 * @method bool isLastYear() Checks if the instance is in the same year as the current moment last year.
 * @method bool isSameWeek(Carbon|DateTimeInterface|string|null $date = null) Checks if the given date is in the same week as the instance. If null passed, compare to now (with the same timezone).
 * @method bool isCurrentWeek() Checks if the instance is in the same week as the current moment.
 * @method bool isNextWeek() Checks if the instance is in the same week as the current moment next week.
 * @method bool isLastWeek() Checks if the instance is in the same week as the current moment last week.
 * @method bool isSameDay(Carbon|DateTimeInterface|string|null $date = null) Checks if the given date is in the same day as the instance. If null passed, compare to now (with the same timezone).
 * @method bool isCurrentDay() Checks if the instance is in the same day as the current moment.
 * @method bool isNextDay() Checks if the instance is in the same day as the current moment next day.
 * @method bool isLastDay() Checks if the instance is in the same day as the current moment last day.
 * @method bool isSameHour(Carbon|DateTimeInterface|string|null $date = null) Checks if the given date is in the same hour as the instance. If null passed, compare to now (with the same timezone).
 * @method bool isCurrentHour() Checks if the instance is in the same hour as the current moment.
 * @method bool isNextHour() Checks if the instance is in the same hour as the current moment next hour.
 * @method bool isLastHour() Checks if the instance is in the same hour as the current moment last hour.
 * @method bool isSameMinute(Carbon|DateTimeInterface|string|null $date = null) Checks if the given date is in the same minute as the instance. If null passed, compare to now (with the same timezone).
 * @method bool isCurrentMinute() Checks if the instance is in the same minute as the current moment.
 * @method bool isNextMinute() Checks if the instance is in the same minute as the current moment next minute.
 * @method bool isLastMinute() Checks if the instance is in the same minute as the current moment last minute.
 * @method bool isSameSecond(Carbon|DateTimeInterface|string|null $date = null) Checks if the given date is in the same second as the instance. If null passed, compare to now (with the same timezone).
 * @method bool isCurrentSecond() Checks if the instance is in the same second as the current moment.
 * @method bool isNextSecond() Checks if the instance is in the same second as the current moment next second.
 * @method bool isLastSecond() Checks if the instance is in the same second as the current moment last second.
 * @method bool isSameMicro(Carbon|DateTimeInterface|string|null $date = null) Checks if the given date is in the same microsecond as the instance. If null passed, compare to now (with the same timezone).
 * @method bool isCurrentMicro() Checks if the instance is in the same microsecond as the current moment.
 * @method bool isNextMicro() Checks if the instance is in the same microsecond as the current moment next microsecond.
 * @method bool isLastMicro() Checks if the instance is in the same microsecond as the current moment last microsecond.
 * @method bool isSameMicrosecond(Carbon|DateTimeInterface|string|null $date = null) Checks if the given date is in the same microsecond as the instance. If null passed, compare to now (with the same timezone).
 * @method bool isCurrentMicrosecond() Checks if the instance is in the same microsecond as the current moment.
 * @method bool isNextMicrosecond() Checks if the instance is in the same microsecond as the current moment next microsecond.
 * @method bool isLastMicrosecond() Checks if the instance is in the same microsecond as the current moment last microsecond.
 * @method bool isCurrentMonth() Checks if the instance is in the same month as the current moment.
 * @method bool isNextMonth() Checks if the instance is in the same month as the current moment next month.
 * @method bool isLastMonth() Checks if the instance is in the same month as the current moment last month.
 * @method bool isCurrentQuarter() Checks if the instance is in the same quarter as the current moment.
 * @method bool isNextQuarter() Checks if the instance is in the same quarter as the current moment next quarter.
 * @method bool isLastQuarter() Checks if the instance is in the same quarter as the current moment last quarter.
 * @method bool isSameDecade(Carbon|DateTimeInterface|string|null $date = null) Checks if the given date is in the same decade as the instance. If null passed, compare to now (with the same timezone).
 * @method bool isCurrentDecade() Checks if the instance is in the same decade as the current moment.
 * @method bool isNextDecade() Checks if the instance is in the same decade as the current moment next decade.
 * @method bool isLastDecade() Checks if the instance is in the same decade as the current moment last decade.
 * @method bool isSameCentury(Carbon|DateTimeInterface|string|null $date = null) Checks if the given date is in the same century as the instance. If null passed, compare to now (with the same timezone).
 * @method bool isCurrentCentury() Checks if the instance is in the same century as the current moment.
 * @method bool isNextCentury() Checks if the instance is in the same century as the current moment next century.
 * @method bool isLastCentury() Checks if the instance is in the same century as the current moment last century.
 * @method bool isSameMillennium(Carbon|DateTimeInterface|string|null $date = null) Checks if the given date is in the same millennium as the instance. If null passed, compare to now (with the same timezone).
 * @method bool isCurrentMillennium() Checks if the instance is in the same millennium as the current moment.
 * @method bool isNextMillennium() Checks if the instance is in the same millennium as the current moment next millennium.
 * @method bool isLastMillennium() Checks if the instance is in the same millennium as the current moment last millennium.
 * @method CarbonInterface years(int $value) Set current instance year to the given value.
 * @method CarbonInterface year(int $value) Set current instance year to the given value.
 * @method CarbonInterface setYears(int $value) Set current instance year to the given value.
 * @method CarbonInterface setYear(int $value) Set current instance year to the given value.
 * @method CarbonInterface months(int $value) Set current instance month to the given value.
 * @method CarbonInterface month(int $value) Set current instance month to the given value.
 * @method CarbonInterface setMonths(int $value) Set current instance month to the given value.
 * @method CarbonInterface setMonth(int $value) Set current instance month to the given value.
 * @method CarbonInterface days(int $value) Set current instance day to the given value.
 * @method CarbonInterface day(int $value) Set current instance day to the given value.
 * @method CarbonInterface setDays(int $value) Set current instance day to the given value.
 * @method CarbonInterface setDay(int $value) Set current instance day to the given value.
 * @method CarbonInterface hours(int $value) Set current instance hour to the given value.
 * @method CarbonInterface hour(int $value) Set current instance hour to the given value.
 * @method CarbonInterface setHours(int $value) Set current instance hour to the given value.
 * @method CarbonInterface setHour(int $value) Set current instance hour to the given value.
 * @method CarbonInterface minutes(int $value) Set current instance minute to the given value.
 * @method CarbonInterface minute(int $value) Set current instance minute to the given value.
 * @method CarbonInterface setMinutes(int $value) Set current instance minute to the given value.
 * @method CarbonInterface setMinute(int $value) Set current instance minute to the given value.
 * @method CarbonInterface seconds(int $value) Set current instance second to the given value.
 * @method CarbonInterface second(int $value) Set current instance second to the given value.
 * @method CarbonInterface setSeconds(int $value) Set current instance second to the given value.
 * @method CarbonInterface setSecond(int $value) Set current instance second to the given value.
 * @method CarbonInterface millis(int $value) Set current instance millisecond to the given value.
 * @method CarbonInterface milli(int $value) Set current instance millisecond to the given value.
 * @method CarbonInterface setMillis(int $value) Set current instance millisecond to the given value.
 * @method CarbonInterface setMilli(int $value) Set current instance millisecond to the given value.
 * @method CarbonInterface milliseconds(int $value) Set current instance millisecond to the given value.
 * @method CarbonInterface millisecond(int $value) Set current instance millisecond to the given value.
 * @method CarbonInterface setMilliseconds(int $value) Set current instance millisecond to the given value.
 * @method CarbonInterface setMillisecond(int $value) Set current instance millisecond to the given value.
 * @method CarbonInterface micros(int $value) Set current instance microsecond to the given value.
 * @method CarbonInterface micro(int $value) Set current instance microsecond to the given value.
 * @method CarbonInterface setMicros(int $value) Set current instance microsecond to the given value.
 * @method CarbonInterface setMicro(int $value) Set current instance microsecond to the given value.
 * @method CarbonInterface microseconds(int $value) Set current instance microsecond to the given value.
 * @method CarbonInterface microsecond(int $value) Set current instance microsecond to the given value.
 * @method CarbonInterface setMicroseconds(int $value) Set current instance microsecond to the given value.
 * @method CarbonInterface setMicrosecond(int $value) Set current instance microsecond to the given value.
 * @method CarbonInterface addYears(int $value = 1) Add years (the $value count passed in) to the instance (using date interval).
 * @method CarbonInterface addYear() Add one year to the instance (using date interval).
 * @method CarbonInterface subYears(int $value = 1) Sub years (the $value count passed in) to the instance (using date interval).
 * @method CarbonInterface subYear() Sub one year to the instance (using date interval).
 * @method CarbonInterface addYearsWithOverflow(int $value = 1) Add years (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed.
 * @method CarbonInterface addYearWithOverflow() Add one year to the instance (using date interval) with overflow explicitly allowed.
 * @method CarbonInterface subYearsWithOverflow(int $value = 1) Sub years (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed.
 * @method CarbonInterface subYearWithOverflow() Sub one year to the instance (using date interval) with overflow explicitly allowed.
 * @method CarbonInterface addYearsWithoutOverflow(int $value = 1) Add years (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface addYearWithoutOverflow() Add one year to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface subYearsWithoutOverflow(int $value = 1) Sub years (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface subYearWithoutOverflow() Sub one year to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface addYearsWithNoOverflow(int $value = 1) Add years (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface addYearWithNoOverflow() Add one year to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface subYearsWithNoOverflow(int $value = 1) Sub years (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface subYearWithNoOverflow() Sub one year to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface addYearsNoOverflow(int $value = 1) Add years (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface addYearNoOverflow() Add one year to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface subYearsNoOverflow(int $value = 1) Sub years (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface subYearNoOverflow() Sub one year to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface addMonths(int $value = 1) Add months (the $value count passed in) to the instance (using date interval).
 * @method CarbonInterface addMonth() Add one month to the instance (using date interval).
 * @method CarbonInterface subMonths(int $value = 1) Sub months (the $value count passed in) to the instance (using date interval).
 * @method CarbonInterface subMonth() Sub one month to the instance (using date interval).
 * @method CarbonInterface addMonthsWithOverflow(int $value = 1) Add months (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed.
 * @method CarbonInterface addMonthWithOverflow() Add one month to the instance (using date interval) with overflow explicitly allowed.
 * @method CarbonInterface subMonthsWithOverflow(int $value = 1) Sub months (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed.
 * @method CarbonInterface subMonthWithOverflow() Sub one month to the instance (using date interval) with overflow explicitly allowed.
 * @method CarbonInterface addMonthsWithoutOverflow(int $value = 1) Add months (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface addMonthWithoutOverflow() Add one month to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface subMonthsWithoutOverflow(int $value = 1) Sub months (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface subMonthWithoutOverflow() Sub one month to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface addMonthsWithNoOverflow(int $value = 1) Add months (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface addMonthWithNoOverflow() Add one month to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface subMonthsWithNoOverflow(int $value = 1) Sub months (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface subMonthWithNoOverflow() Sub one month to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface addMonthsNoOverflow(int $value = 1) Add months (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface addMonthNoOverflow() Add one month to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface subMonthsNoOverflow(int $value = 1) Sub months (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface subMonthNoOverflow() Sub one month to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface addDays(int $value = 1) Add days (the $value count passed in) to the instance (using date interval).
 * @method CarbonInterface addDay() Add one day to the instance (using date interval).
 * @method CarbonInterface subDays(int $value = 1) Sub days (the $value count passed in) to the instance (using date interval).
 * @method CarbonInterface subDay() Sub one day to the instance (using date interval).
 * @method CarbonInterface addHours(int $value = 1) Add hours (the $value count passed in) to the instance (using date interval).
 * @method CarbonInterface addHour() Add one hour to the instance (using date interval).
 * @method CarbonInterface subHours(int $value = 1) Sub hours (the $value count passed in) to the instance (using date interval).
 * @method CarbonInterface subHour() Sub one hour to the instance (using date interval).
 * @method CarbonInterface addMinutes(int $value = 1) Add minutes (the $value count passed in) to the instance (using date interval).
 * @method CarbonInterface addMinute() Add one minute to the instance (using date interval).
 * @method CarbonInterface subMinutes(int $value = 1) Sub minutes (the $value count passed in) to the instance (using date interval).
 * @method CarbonInterface subMinute() Sub one minute to the instance (using date interval).
 * @method CarbonInterface addSeconds(int $value = 1) Add seconds (the $value count passed in) to the instance (using date interval).
 * @method CarbonInterface addSecond() Add one second to the instance (using date interval).
 * @method CarbonInterface subSeconds(int $value = 1) Sub seconds (the $value count passed in) to the instance (using date interval).
 * @method CarbonInterface subSecond() Sub one second to the instance (using date interval).
 * @method CarbonInterface addMillis(int $value = 1) Add milliseconds (the $value count passed in) to the instance (using date interval).
 * @method CarbonInterface addMilli() Add one millisecond to the instance (using date interval).
 * @method CarbonInterface subMillis(int $value = 1) Sub milliseconds (the $value count passed in) to the instance (using date interval).
 * @method CarbonInterface subMilli() Sub one millisecond to the instance (using date interval).
 * @method CarbonInterface addMilliseconds(int $value = 1) Add milliseconds (the $value count passed in) to the instance (using date interval).
 * @method CarbonInterface addMillisecond() Add one millisecond to the instance (using date interval).
 * @method CarbonInterface subMilliseconds(int $value = 1) Sub milliseconds (the $value count passed in) to the instance (using date interval).
 * @method CarbonInterface subMillisecond() Sub one millisecond to the instance (using date interval).
 * @method CarbonInterface addMicros(int $value = 1) Add microseconds (the $value count passed in) to the instance (using date interval).
 * @method CarbonInterface addMicro() Add one microsecond to the instance (using date interval).
 * @method CarbonInterface subMicros(int $value = 1) Sub microseconds (the $value count passed in) to the instance (using date interval).
 * @method CarbonInterface subMicro() Sub one microsecond to the instance (using date interval).
 * @method CarbonInterface addMicroseconds(int $value = 1) Add microseconds (the $value count passed in) to the instance (using date interval).
 * @method CarbonInterface addMicrosecond() Add one microsecond to the instance (using date interval).
 * @method CarbonInterface subMicroseconds(int $value = 1) Sub microseconds (the $value count passed in) to the instance (using date interval).
 * @method CarbonInterface subMicrosecond() Sub one microsecond to the instance (using date interval).
 * @method CarbonInterface addMillennia(int $value = 1) Add millennia (the $value count passed in) to the instance (using date interval).
 * @method CarbonInterface addMillennium() Add one millennium to the instance (using date interval).
 * @method CarbonInterface subMillennia(int $value = 1) Sub millennia (the $value count passed in) to the instance (using date interval).
 * @method CarbonInterface subMillennium() Sub one millennium to the instance (using date interval).
 * @method CarbonInterface addMillenniaWithOverflow(int $value = 1) Add millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed.
 * @method CarbonInterface addMillenniumWithOverflow() Add one millennium to the instance (using date interval) with overflow explicitly allowed.
 * @method CarbonInterface subMillenniaWithOverflow(int $value = 1) Sub millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed.
 * @method CarbonInterface subMillenniumWithOverflow() Sub one millennium to the instance (using date interval) with overflow explicitly allowed.
 * @method CarbonInterface addMillenniaWithoutOverflow(int $value = 1) Add millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface addMillenniumWithoutOverflow() Add one millennium to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface subMillenniaWithoutOverflow(int $value = 1) Sub millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface subMillenniumWithoutOverflow() Sub one millennium to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface addMillenniaWithNoOverflow(int $value = 1) Add millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface addMillenniumWithNoOverflow() Add one millennium to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface subMillenniaWithNoOverflow(int $value = 1) Sub millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface subMillenniumWithNoOverflow() Sub one millennium to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface addMillenniaNoOverflow(int $value = 1) Add millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface addMillenniumNoOverflow() Add one millennium to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface subMillenniaNoOverflow(int $value = 1) Sub millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface subMillenniumNoOverflow() Sub one millennium to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface addCenturies(int $value = 1) Add centuries (the $value count passed in) to the instance (using date interval).
 * @method CarbonInterface addCentury() Add one century to the instance (using date interval).
 * @method CarbonInterface subCenturies(int $value = 1) Sub centuries (the $value count passed in) to the instance (using date interval).
 * @method CarbonInterface subCentury() Sub one century to the instance (using date interval).
 * @method CarbonInterface addCenturiesWithOverflow(int $value = 1) Add centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed.
 * @method CarbonInterface addCenturyWithOverflow() Add one century to the instance (using date interval) with overflow explicitly allowed.
 * @method CarbonInterface subCenturiesWithOverflow(int $value = 1) Sub centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed.
 * @method CarbonInterface subCenturyWithOverflow() Sub one century to the instance (using date interval) with overflow explicitly allowed.
 * @method CarbonInterface addCenturiesWithoutOverflow(int $value = 1) Add centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface addCenturyWithoutOverflow() Add one century to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface subCenturiesWithoutOverflow(int $value = 1) Sub centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface subCenturyWithoutOverflow() Sub one century to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface addCenturiesWithNoOverflow(int $value = 1) Add centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface addCenturyWithNoOverflow() Add one century to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface subCenturiesWithNoOverflow(int $value = 1) Sub centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface subCenturyWithNoOverflow() Sub one century to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface addCenturiesNoOverflow(int $value = 1) Add centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface addCenturyNoOverflow() Add one century to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface subCenturiesNoOverflow(int $value = 1) Sub centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface subCenturyNoOverflow() Sub one century to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface addDecades(int $value = 1) Add decades (the $value count passed in) to the instance (using date interval).
 * @method CarbonInterface addDecade() Add one decade to the instance (using date interval).
 * @method CarbonInterface subDecades(int $value = 1) Sub decades (the $value count passed in) to the instance (using date interval).
 * @method CarbonInterface subDecade() Sub one decade to the instance (using date interval).
 * @method CarbonInterface addDecadesWithOverflow(int $value = 1) Add decades (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed.
 * @method CarbonInterface addDecadeWithOverflow() Add one decade to the instance (using date interval) with overflow explicitly allowed.
 * @method CarbonInterface subDecadesWithOverflow(int $value = 1) Sub decades (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed.
 * @method CarbonInterface subDecadeWithOverflow() Sub one decade to the instance (using date interval) with overflow explicitly allowed.
 * @method CarbonInterface addDecadesWithoutOverflow(int $value = 1) Add decades (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface addDecadeWithoutOverflow() Add one decade to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface subDecadesWithoutOverflow(int $value = 1) Sub decades (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface subDecadeWithoutOverflow() Sub one decade to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface addDecadesWithNoOverflow(int $value = 1) Add decades (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface addDecadeWithNoOverflow() Add one decade to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface subDecadesWithNoOverflow(int $value = 1) Sub decades (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface subDecadeWithNoOverflow() Sub one decade to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface addDecadesNoOverflow(int $value = 1) Add decades (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface addDecadeNoOverflow() Add one decade to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface subDecadesNoOverflow(int $value = 1) Sub decades (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface subDecadeNoOverflow() Sub one decade to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface addQuarters(int $value = 1) Add quarters (the $value count passed in) to the instance (using date interval).
 * @method CarbonInterface addQuarter() Add one quarter to the instance (using date interval).
 * @method CarbonInterface subQuarters(int $value = 1) Sub quarters (the $value count passed in) to the instance (using date interval).
 * @method CarbonInterface subQuarter() Sub one quarter to the instance (using date interval).
 * @method CarbonInterface addQuartersWithOverflow(int $value = 1) Add quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed.
 * @method CarbonInterface addQuarterWithOverflow() Add one quarter to the instance (using date interval) with overflow explicitly allowed.
 * @method CarbonInterface subQuartersWithOverflow(int $value = 1) Sub quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed.
 * @method CarbonInterface subQuarterWithOverflow() Sub one quarter to the instance (using date interval) with overflow explicitly allowed.
 * @method CarbonInterface addQuartersWithoutOverflow(int $value = 1) Add quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface addQuarterWithoutOverflow() Add one quarter to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface subQuartersWithoutOverflow(int $value = 1) Sub quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface subQuarterWithoutOverflow() Sub one quarter to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface addQuartersWithNoOverflow(int $value = 1) Add quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface addQuarterWithNoOverflow() Add one quarter to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface subQuartersWithNoOverflow(int $value = 1) Sub quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface subQuarterWithNoOverflow() Sub one quarter to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface addQuartersNoOverflow(int $value = 1) Add quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface addQuarterNoOverflow() Add one quarter to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface subQuartersNoOverflow(int $value = 1) Sub quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface subQuarterNoOverflow() Sub one quarter to the instance (using date interval) with overflow explicitly forbidden.
 * @method CarbonInterface addWeeks(int $value = 1) Add weeks (the $value count passed in) to the instance (using date interval).
 * @method CarbonInterface addWeek() Add one week to the instance (using date interval).
 * @method CarbonInterface subWeeks(int $value = 1) Sub weeks (the $value count passed in) to the instance (using date interval).
 * @method CarbonInterface subWeek() Sub one week to the instance (using date interval).
 * @method CarbonInterface addWeekdays(int $value = 1) Add weekdays (the $value count passed in) to the instance (using date interval).
 * @method CarbonInterface addWeekday() Add one weekday to the instance (using date interval).
 * @method CarbonInterface subWeekdays(int $value = 1) Sub weekdays (the $value count passed in) to the instance (using date interval).
 * @method CarbonInterface subWeekday() Sub one weekday to the instance (using date interval).
 * @method CarbonInterface addRealMicros(int $value = 1) Add microseconds (the $value count passed in) to the instance (using timestamp).
 * @method CarbonInterface addRealMicro() Add one microsecond to the instance (using timestamp).
 * @method CarbonInterface subRealMicros(int $value = 1) Sub microseconds (the $value count passed in) to the instance (using timestamp).
 * @method CarbonInterface subRealMicro() Sub one microsecond to the instance (using timestamp).
 * @method CarbonPeriod microsUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each microsecond or every X microseconds if a factor is given.
 * @method CarbonInterface addRealMicroseconds(int $value = 1) Add microseconds (the $value count passed in) to the instance (using timestamp).
 * @method CarbonInterface addRealMicrosecond() Add one microsecond to the instance (using timestamp).
 * @method CarbonInterface subRealMicroseconds(int $value = 1) Sub microseconds (the $value count passed in) to the instance (using timestamp).
 * @method CarbonInterface subRealMicrosecond() Sub one microsecond to the instance (using timestamp).
 * @method CarbonPeriod microsecondsUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each microsecond or every X microseconds if a factor is given.
 * @method CarbonInterface addRealMillis(int $value = 1) Add milliseconds (the $value count passed in) to the instance (using timestamp).
 * @method CarbonInterface addRealMilli() Add one millisecond to the instance (using timestamp).
 * @method CarbonInterface subRealMillis(int $value = 1) Sub milliseconds (the $value count passed in) to the instance (using timestamp).
 * @method CarbonInterface subRealMilli() Sub one millisecond to the instance (using timestamp).
 * @method CarbonPeriod millisUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each millisecond or every X milliseconds if a factor is given.
 * @method CarbonInterface addRealMilliseconds(int $value = 1) Add milliseconds (the $value count passed in) to the instance (using timestamp).
 * @method CarbonInterface addRealMillisecond() Add one millisecond to the instance (using timestamp).
 * @method CarbonInterface subRealMilliseconds(int $value = 1) Sub milliseconds (the $value count passed in) to the instance (using timestamp).
 * @method CarbonInterface subRealMillisecond() Sub one millisecond to the instance (using timestamp).
 * @method CarbonPeriod millisecondsUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each millisecond or every X milliseconds if a factor is given.
 * @method CarbonInterface addRealSeconds(int $value = 1) Add seconds (the $value count passed in) to the instance (using timestamp).
 * @method CarbonInterface addRealSecond() Add one second to the instance (using timestamp).
 * @method CarbonInterface subRealSeconds(int $value = 1) Sub seconds (the $value count passed in) to the instance (using timestamp).
 * @method CarbonInterface subRealSecond() Sub one second to the instance (using timestamp).
 * @method CarbonPeriod secondsUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each second or every X seconds if a factor is given.
 * @method CarbonInterface addRealMinutes(int $value = 1) Add minutes (the $value count passed in) to the instance (using timestamp).
 * @method CarbonInterface addRealMinute() Add one minute to the instance (using timestamp).
 * @method CarbonInterface subRealMinutes(int $value = 1) Sub minutes (the $value count passed in) to the instance (using timestamp).
 * @method CarbonInterface subRealMinute() Sub one minute to the instance (using timestamp).
 * @method CarbonPeriod minutesUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each minute or every X minutes if a factor is given.
 * @method CarbonInterface addRealHours(int $value = 1) Add hours (the $value count passed in) to the instance (using timestamp).
 * @method CarbonInterface addRealHour() Add one hour to the instance (using timestamp).
 * @method CarbonInterface subRealHours(int $value = 1) Sub hours (the $value count passed in) to the instance (using timestamp).
 * @method CarbonInterface subRealHour() Sub one hour to the instance (using timestamp).
 * @method CarbonPeriod hoursUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each hour or every X hours if a factor is given.
 * @method CarbonInterface addRealDays(int $value = 1) Add days (the $value count passed in) to the instance (using timestamp).
 * @method CarbonInterface addRealDay() Add one day to the instance (using timestamp).
 * @method CarbonInterface subRealDays(int $value = 1) Sub days (the $value count passed in) to the instance (using timestamp).
 * @method CarbonInterface subRealDay() Sub one day to the instance (using timestamp).
 * @method CarbonPeriod daysUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each day or every X days if a factor is given.
 * @method CarbonInterface addRealWeeks(int $value = 1) Add weeks (the $value count passed in) to the instance (using timestamp).
 * @method CarbonInterface addRealWeek() Add one week to the instance (using timestamp).
 * @method CarbonInterface subRealWeeks(int $value = 1) Sub weeks (the $value count passed in) to the instance (using timestamp).
 * @method CarbonInterface subRealWeek() Sub one week to the instance (using timestamp).
 * @method CarbonPeriod weeksUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each week or every X weeks if a factor is given.
 * @method CarbonInterface addRealMonths(int $value = 1) Add months (the $value count passed in) to the instance (using timestamp).
 * @method CarbonInterface addRealMonth() Add one month to the instance (using timestamp).
 * @method CarbonInterface subRealMonths(int $value = 1) Sub months (the $value count passed in) to the instance (using timestamp).
 * @method CarbonInterface subRealMonth() Sub one month to the instance (using timestamp).
 * @method CarbonPeriod monthsUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each month or every X months if a factor is given.
 * @method CarbonInterface addRealQuarters(int $value = 1) Add quarters (the $value count passed in) to the instance (using timestamp).
 * @method CarbonInterface addRealQuarter() Add one quarter to the instance (using timestamp).
 * @method CarbonInterface subRealQuarters(int $value = 1) Sub quarters (the $value count passed in) to the instance (using timestamp).
 * @method CarbonInterface subRealQuarter() Sub one quarter to the instance (using timestamp).
 * @method CarbonPeriod quartersUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each quarter or every X quarters if a factor is given.
 * @method CarbonInterface addRealYears(int $value = 1) Add years (the $value count passed in) to the instance (using timestamp).
 * @method CarbonInterface addRealYear() Add one year to the instance (using timestamp).
 * @method CarbonInterface subRealYears(int $value = 1) Sub years (the $value count passed in) to the instance (using timestamp).
 * @method CarbonInterface subRealYear() Sub one year to the instance (using timestamp).
 * @method CarbonPeriod yearsUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each year or every X years if a factor is given.
 * @method CarbonInterface addRealDecades(int $value = 1) Add decades (the $value count passed in) to the instance (using timestamp).
 * @method CarbonInterface addRealDecade() Add one decade to the instance (using timestamp).
 * @method CarbonInterface subRealDecades(int $value = 1) Sub decades (the $value count passed in) to the instance (using timestamp).
 * @method CarbonInterface subRealDecade() Sub one decade to the instance (using timestamp).
 * @method CarbonPeriod decadesUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each decade or every X decades if a factor is given.
 * @method CarbonInterface addRealCenturies(int $value = 1) Add centuries (the $value count passed in) to the instance (using timestamp).
 * @method CarbonInterface addRealCentury() Add one century to the instance (using timestamp).
 * @method CarbonInterface subRealCenturies(int $value = 1) Sub centuries (the $value count passed in) to the instance (using timestamp).
 * @method CarbonInterface subRealCentury() Sub one century to the instance (using timestamp).
 * @method CarbonPeriod centuriesUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each century or every X centuries if a factor is given.
 * @method CarbonInterface addRealMillennia(int $value = 1) Add millennia (the $value count passed in) to the instance (using timestamp).
 * @method CarbonInterface addRealMillennium() Add one millennium to the instance (using timestamp).
 * @method CarbonInterface subRealMillennia(int $value = 1) Sub millennia (the $value count passed in) to the instance (using timestamp).
 * @method CarbonInterface subRealMillennium() Sub one millennium to the instance (using timestamp).
 * @method CarbonPeriod millenniaUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each millennium or every X millennia if a factor is given.
 * @method CarbonInterface roundYear(float $precision = 1, string $function = "round") Round the current instance year with given precision using the given function.
 * @method CarbonInterface roundYears(float $precision = 1, string $function = "round") Round the current instance year with given precision using the given function.
 * @method CarbonInterface floorYear(float $precision = 1) Truncate the current instance year with given precision.
 * @method CarbonInterface floorYears(float $precision = 1) Truncate the current instance year with given precision.
 * @method CarbonInterface ceilYear(float $precision = 1) Ceil the current instance year with given precision.
 * @method CarbonInterface ceilYears(float $precision = 1) Ceil the current instance year with given precision.
 * @method CarbonInterface roundMonth(float $precision = 1, string $function = "round") Round the current instance month with given precision using the given function.
 * @method CarbonInterface roundMonths(float $precision = 1, string $function = "round") Round the current instance month with given precision using the given function.
 * @method CarbonInterface floorMonth(float $precision = 1) Truncate the current instance month with given precision.
 * @method CarbonInterface floorMonths(float $precision = 1) Truncate the current instance month with given precision.
 * @method CarbonInterface ceilMonth(float $precision = 1) Ceil the current instance month with given precision.
 * @method CarbonInterface ceilMonths(float $precision = 1) Ceil the current instance month with given precision.
 * @method CarbonInterface roundDay(float $precision = 1, string $function = "round") Round the current instance day with given precision using the given function.
 * @method CarbonInterface roundDays(float $precision = 1, string $function = "round") Round the current instance day with given precision using the given function.
 * @method CarbonInterface floorDay(float $precision = 1) Truncate the current instance day with given precision.
 * @method CarbonInterface floorDays(float $precision = 1) Truncate the current instance day with given precision.
 * @method CarbonInterface ceilDay(float $precision = 1) Ceil the current instance day with given precision.
 * @method CarbonInterface ceilDays(float $precision = 1) Ceil the current instance day with given precision.
 * @method CarbonInterface roundHour(float $precision = 1, string $function = "round") Round the current instance hour with given precision using the given function.
 * @method CarbonInterface roundHours(float $precision = 1, string $function = "round") Round the current instance hour with given precision using the given function.
 * @method CarbonInterface floorHour(float $precision = 1) Truncate the current instance hour with given precision.
 * @method CarbonInterface floorHours(float $precision = 1) Truncate the current instance hour with given precision.
 * @method CarbonInterface ceilHour(float $precision = 1) Ceil the current instance hour with given precision.
 * @method CarbonInterface ceilHours(float $precision = 1) Ceil the current instance hour with given precision.
 * @method CarbonInterface roundMinute(float $precision = 1, string $function = "round") Round the current instance minute with given precision using the given function.
 * @method CarbonInterface roundMinutes(float $precision = 1, string $function = "round") Round the current instance minute with given precision using the given function.
 * @method CarbonInterface floorMinute(float $precision = 1) Truncate the current instance minute with given precision.
 * @method CarbonInterface floorMinutes(float $precision = 1) Truncate the current instance minute with given precision.
 * @method CarbonInterface ceilMinute(float $precision = 1) Ceil the current instance minute with given precision.
 * @method CarbonInterface ceilMinutes(float $precision = 1) Ceil the current instance minute with given precision.
 * @method CarbonInterface roundSecond(float $precision = 1, string $function = "round") Round the current instance second with given precision using the given function.
 * @method CarbonInterface roundSeconds(float $precision = 1, string $function = "round") Round the current instance second with given precision using the given function.
 * @method CarbonInterface floorSecond(float $precision = 1) Truncate the current instance second with given precision.
 * @method CarbonInterface floorSeconds(float $precision = 1) Truncate the current instance second with given precision.
 * @method CarbonInterface ceilSecond(float $precision = 1) Ceil the current instance second with given precision.
 * @method CarbonInterface ceilSeconds(float $precision = 1) Ceil the current instance second with given precision.
 * @method CarbonInterface roundMillennium(float $precision = 1, string $function = "round") Round the current instance millennium with given precision using the given function.
 * @method CarbonInterface roundMillennia(float $precision = 1, string $function = "round") Round the current instance millennium with given precision using the given function.
 * @method CarbonInterface floorMillennium(float $precision = 1) Truncate the current instance millennium with given precision.
 * @method CarbonInterface floorMillennia(float $precision = 1) Truncate the current instance millennium with given precision.
 * @method CarbonInterface ceilMillennium(float $precision = 1) Ceil the current instance millennium with given precision.
 * @method CarbonInterface ceilMillennia(float $precision = 1) Ceil the current instance millennium with given precision.
 * @method CarbonInterface roundCentury(float $precision = 1, string $function = "round") Round the current instance century with given precision using the given function.
 * @method CarbonInterface roundCenturies(float $precision = 1, string $function = "round") Round the current instance century with given precision using the given function.
 * @method CarbonInterface floorCentury(float $precision = 1) Truncate the current instance century with given precision.
 * @method CarbonInterface floorCenturies(float $precision = 1) Truncate the current instance century with given precision.
 * @method CarbonInterface ceilCentury(float $precision = 1) Ceil the current instance century with given precision.
 * @method CarbonInterface ceilCenturies(float $precision = 1) Ceil the current instance century with given precision.
 * @method CarbonInterface roundDecade(float $precision = 1, string $function = "round") Round the current instance decade with given precision using the given function.
 * @method CarbonInterface roundDecades(float $precision = 1, string $function = "round") Round the current instance decade with given precision using the given function.
 * @method CarbonInterface floorDecade(float $precision = 1) Truncate the current instance decade with given precision.
 * @method CarbonInterface floorDecades(float $precision = 1) Truncate the current instance decade with given precision.
 * @method CarbonInterface ceilDecade(float $precision = 1) Ceil the current instance decade with given precision.
 * @method CarbonInterface ceilDecades(float $precision = 1) Ceil the current instance decade with given precision.
 * @method CarbonInterface roundQuarter(float $precision = 1, string $function = "round") Round the current instance quarter with given precision using the given function.
 * @method CarbonInterface roundQuarters(float $precision = 1, string $function = "round") Round the current instance quarter with given precision using the given function.
 * @method CarbonInterface floorQuarter(float $precision = 1) Truncate the current instance quarter with given precision.
 * @method CarbonInterface floorQuarters(float $precision = 1) Truncate the current instance quarter with given precision.
 * @method CarbonInterface ceilQuarter(float $precision = 1) Ceil the current instance quarter with given precision.
 * @method CarbonInterface ceilQuarters(float $precision = 1) Ceil the current instance quarter with given precision.
 * @method CarbonInterface roundMillisecond(float $precision = 1, string $function = "round") Round the current instance millisecond with given precision using the given function.
 * @method CarbonInterface roundMilliseconds(float $precision = 1, string $function = "round") Round the current instance millisecond with given precision using the given function.
 * @method CarbonInterface floorMillisecond(float $precision = 1) Truncate the current instance millisecond with given precision.
 * @method CarbonInterface floorMilliseconds(float $precision = 1) Truncate the current instance millisecond with given precision.
 * @method CarbonInterface ceilMillisecond(float $precision = 1) Ceil the current instance millisecond with given precision.
 * @method CarbonInterface ceilMilliseconds(float $precision = 1) Ceil the current instance millisecond with given precision.
 * @method CarbonInterface roundMicrosecond(float $precision = 1, string $function = "round") Round the current instance microsecond with given precision using the given function.
 * @method CarbonInterface roundMicroseconds(float $precision = 1, string $function = "round") Round the current instance microsecond with given precision using the given function.
 * @method CarbonInterface floorMicrosecond(float $precision = 1) Truncate the current instance microsecond with given precision.
 * @method CarbonInterface floorMicroseconds(float $precision = 1) Truncate the current instance microsecond with given precision.
 * @method CarbonInterface ceilMicrosecond(float $precision = 1) Ceil the current instance microsecond with given precision.
 * @method CarbonInterface ceilMicroseconds(float $precision = 1) Ceil the current instance microsecond with given precision.
 * @method string shortAbsoluteDiffForHumans(DateTimeInterface $other = null, int $parts = 1) Get the difference (short format, 'Absolute' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.)
 * @method string longAbsoluteDiffForHumans(DateTimeInterface $other = null, int $parts = 1) Get the difference (long format, 'Absolute' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.)
 * @method string shortRelativeDiffForHumans(DateTimeInterface $other = null, int $parts = 1) Get the difference (short format, 'Relative' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.)
 * @method string longRelativeDiffForHumans(DateTimeInterface $other = null, int $parts = 1) Get the difference (long format, 'Relative' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.)
 * @method string shortRelativeToNowDiffForHumans(DateTimeInterface $other = null, int $parts = 1) Get the difference (short format, 'RelativeToNow' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.)
 * @method string longRelativeToNowDiffForHumans(DateTimeInterface $other = null, int $parts = 1) Get the difference (long format, 'RelativeToNow' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.)
 * @method string shortRelativeToOtherDiffForHumans(DateTimeInterface $other = null, int $parts = 1) Get the difference (short format, 'RelativeToOther' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.)
 * @method string longRelativeToOtherDiffForHumans(DateTimeInterface $other = null, int $parts = 1) Get the difference (long format, 'RelativeToOther' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.)
 *
 * </autodoc>
 */
trait Date
{
 use Boundaries;
 use Comparison;
 use Converter;
 use Creator;
 use Difference;
 use Macro;
 use Modifiers;
 use Mutability;
 use ObjectInitialisation;
 use Options;
 use Rounding;
 use Serialization;
 use Test;
 use Timestamp;
 use Units;
 use Week;
 /**
 * Names of days of the week.
 *
 * @var array
 */
 protected static $days = [
 // @call isDayOfWeek
 CarbonInterface::SUNDAY => 'Sunday',
 // @call isDayOfWeek
 CarbonInterface::MONDAY => 'Monday',
 // @call isDayOfWeek
 CarbonInterface::TUESDAY => 'Tuesday',
 // @call isDayOfWeek
 CarbonInterface::WEDNESDAY => 'Wednesday',
 // @call isDayOfWeek
 CarbonInterface::THURSDAY => 'Thursday',
 // @call isDayOfWeek
 CarbonInterface::FRIDAY => 'Friday',
 // @call isDayOfWeek
 CarbonInterface::SATURDAY => 'Saturday',
 ];
 /**
 * Will UTF8 encoding be used to print localized date/time ?
 *
 * @var bool
 */
 protected static $utf8 = \false;
 /**
 * List of unit and magic methods associated as doc-comments.
 *
 * @var array
 */
 protected static $units = [
 // @call setUnit
 // @call addUnit
 'year',
 // @call setUnit
 // @call addUnit
 'month',
 // @call setUnit
 // @call addUnit
 'day',
 // @call setUnit
 // @call addUnit
 'hour',
 // @call setUnit
 // @call addUnit
 'minute',
 // @call setUnit
 // @call addUnit
 'second',
 // @call setUnit
 // @call addUnit
 'milli',
 // @call setUnit
 // @call addUnit
 'millisecond',
 // @call setUnit
 // @call addUnit
 'micro',
 // @call setUnit
 // @call addUnit
 'microsecond',
 ];
 /**
 * Creates a DateTimeZone from a string, DateTimeZone or integer offset.
 *
 * @param DateTimeZone|string|int|null $object original value to get CarbonTimeZone from it.
 * @param DateTimeZone|string|int|null $objectDump dump of the object for error messages.
 *
 * @throws InvalidTimeZoneException
 *
 * @return CarbonTimeZone|false
 */
 protected static function safeCreateDateTimeZone($object, $objectDump = null)
 {
 return CarbonTimeZone::instance($object, $objectDump);
 }
 /**
 * Get the TimeZone associated with the Carbon instance (as CarbonTimeZone).
 *
 * @return CarbonTimeZone
 *
 * @link https://php.net/manual/en/datetime.gettimezone.php
 */
 #[\ReturnTypeWillChange]
 public function getTimezone()
 {
 return CarbonTimeZone::instance(parent::getTimezone());
 }
 /**
 * List of minimum and maximums for each unit.
 *
 * @return array
 */
 protected static function getRangesByUnit()
 {
 return [
 // @call roundUnit
 'year' => [1, 9999],
 // @call roundUnit
 'month' => [1, static::MONTHS_PER_YEAR],
 // @call roundUnit
 'day' => [1, 31],
 // @call roundUnit
 'hour' => [0, static::HOURS_PER_DAY - 1],
 // @call roundUnit
 'minute' => [0, static::MINUTES_PER_HOUR - 1],
 // @call roundUnit
 'second' => [0, static::SECONDS_PER_MINUTE - 1],
 ];
 }
 /**
 * Get a copy of the instance.
 *
 * @return static
 */
 public function copy()
 {
 return clone $this;
 }
 /**
 * @alias copy
 *
 * Get a copy of the instance.
 *
 * @return static
 */
 public function clone()
 {
 return clone $this;
 }
 /**
 * Clone the current instance if it's mutable.
 *
 * This method is convenient to ensure you don't mutate the initial object
 * but avoid to make a useless copy of it if it's already immutable.
 *
 * @return static
 */
 public function avoidMutation() : self
 {
 if ($this instanceof DateTimeImmutable) {
 return $this;
 }
 return clone $this;
 }
 /**
 * Returns a present instance in the same timezone.
 *
 * @return static
 */
 public function nowWithSameTz()
 {
 return static::now($this->getTimezone());
 }
 /**
 * Throws an exception if the given object is not a DateTime and does not implement DateTimeInterface.
 *
 * @param mixed $date
 * @param string|array $other
 *
 * @throws InvalidTypeException
 */
 protected static function expectDateTime($date, $other = [])
 {
 $message = 'Expected ';
 foreach ((array) $other as $expect) {
 $message .= "{$expect}, ";
 }
 if (!$date instanceof DateTime && !$date instanceof DateTimeInterface) {
 throw new InvalidTypeException($message . 'DateTime or DateTimeInterface, ' . (\is_object($date) ? \get_class($date) : \gettype($date)) . ' given');
 }
 }
 /**
 * Return the Carbon instance passed through, a now instance in the same timezone
 * if null given or parse the input if string given.
 *
 * @param Carbon|DateTimeInterface|string|null $date
 *
 * @return static
 */
 protected function resolveCarbon($date = null)
 {
 if (!$date) {
 return $this->nowWithSameTz();
 }
 if (\is_string($date)) {
 return static::parse($date, $this->getTimezone());
 }
 static::expectDateTime($date, ['null', 'string']);
 return $date instanceof self ? $date : static::instance($date);
 }
 /**
 * Return the Carbon instance passed through, a now instance in UTC
 * if null given or parse the input if string given (using current timezone
 * then switching to UTC).
 *
 * @param Carbon|DateTimeInterface|string|null $date
 *
 * @return static
 */
 protected function resolveUTC($date = null) : self
 {
 if (!$date) {
 return static::now('UTC');
 }
 if (\is_string($date)) {
 return static::parse($date, $this->getTimezone())->utc();
 }
 static::expectDateTime($date, ['null', 'string']);
 return $date instanceof self ? $date : static::instance($date)->utc();
 }
 /**
 * Return the Carbon instance passed through, a now instance in the same timezone
 * if null given or parse the input if string given.
 *
 * @param Carbon|\Carbon\CarbonPeriod|\Carbon\CarbonInterval|\DateInterval|\DatePeriod|DateTimeInterface|string|null $date
 *
 * @return static
 */
 public function carbonize($date = null)
 {
 if ($date instanceof DateInterval) {
 return $this->avoidMutation()->add($date);
 }
 if ($date instanceof DatePeriod || $date instanceof CarbonPeriod) {
 $date = $date->getStartDate();
 }
 return $this->resolveCarbon($date);
 }
 ///////////////////////////////////////////////////////////////////
 ///////////////////////// GETTERS AND SETTERS /////////////////////
 ///////////////////////////////////////////////////////////////////
 /**
 * Get a part of the Carbon object
 *
 * @param string $name
 *
 * @throws UnknownGetterException
 *
 * @return string|int|bool|DateTimeZone|null
 */
 public function __get($name)
 {
 return $this->get($name);
 }
 /**
 * Get a part of the Carbon object
 *
 * @param string $name
 *
 * @throws UnknownGetterException
 *
 * @return string|int|bool|DateTimeZone|null
 */
 public function get($name)
 {
 static $formats = [
 // @property int
 'year' => 'Y',
 // @property int
 'yearIso' => 'o',
 // @property int
 // @call isSameUnit
 'month' => 'n',
 // @property int
 'day' => 'j',
 // @property int
 'hour' => 'G',
 // @property int
 'minute' => 'i',
 // @property int
 'second' => 's',
 // @property int
 'micro' => 'u',
 // @property int
 'microsecond' => 'u',
 // @property-read int 0 (for Sunday) through 6 (for Saturday)
 'dayOfWeek' => 'w',
 // @property-read int 1 (for Monday) through 7 (for Sunday)
 'dayOfWeekIso' => 'N',
 // @property-read int ISO-8601 week number of year, weeks starting on Monday
 'weekOfYear' => 'W',
 // @property-read int number of days in the given month
 'daysInMonth' => 't',
 // @property int|float|string seconds since the Unix Epoch
 'timestamp' => 'U',
 // @property-read string "am"/"pm" (Ante meridiem or Post meridiem latin lowercase mark)
 'latinMeridiem' => 'a',
 // @property-read string "AM"/"PM" (Ante meridiem or Post meridiem latin uppercase mark)
 'latinUpperMeridiem' => 'A',
 // @property string the day of week in English
 'englishDayOfWeek' => 'l',
 // @property string the abbreviated day of week in English
 'shortEnglishDayOfWeek' => 'D',
 // @property string the month in English
 'englishMonth' => 'F',
 // @property string the abbreviated month in English
 'shortEnglishMonth' => 'M',
 // @property string the day of week in current locale LC_TIME
 // @deprecated
 // reason: It uses OS language package and strftime() which is deprecated since PHP 8.1.
 // replacement: Use ->isoFormat('MMM') instead.
 // since: 2.55.0
 'localeDayOfWeek' => '%A',
 // @property string the abbreviated day of week in current locale LC_TIME
 // @deprecated
 // reason: It uses OS language package and strftime() which is deprecated since PHP 8.1.
 // replacement: Use ->isoFormat('dddd') instead.
 // since: 2.55.0
 'shortLocaleDayOfWeek' => '%a',
 // @property string the month in current locale LC_TIME
 // @deprecated
 // reason: It uses OS language package and strftime() which is deprecated since PHP 8.1.
 // replacement: Use ->isoFormat('ddd') instead.
 // since: 2.55.0
 'localeMonth' => '%B',
 // @property string the abbreviated month in current locale LC_TIME
 // @deprecated
 // reason: It uses OS language package and strftime() which is deprecated since PHP 8.1.
 // replacement: Use ->isoFormat('MMMM') instead.
 // since: 2.55.0
 'shortLocaleMonth' => '%b',
 // @property-read string $timezoneAbbreviatedName the current timezone abbreviated name
 'timezoneAbbreviatedName' => 'T',
 // @property-read string $tzAbbrName alias of $timezoneAbbreviatedName
 'tzAbbrName' => 'T',
 ];
 switch (\true) {
 case isset($formats[$name]):
 $format = $formats[$name];
 $method = \str_starts_with($format, '%') ? 'formatLocalized' : 'rawFormat';
 $value = $this->{$method}($format);
 return \is_numeric($value) ? (int) $value : $value;
 // @property-read string long name of weekday translated according to Carbon locale, in english if no translation available for current language
 case $name === 'dayName':
 return $this->getTranslatedDayName();
 // @property-read string short name of weekday translated according to Carbon locale, in english if no translation available for current language
 case $name === 'shortDayName':
 return $this->getTranslatedShortDayName();
 // @property-read string very short name of weekday translated according to Carbon locale, in english if no translation available for current language
 case $name === 'minDayName':
 return $this->getTranslatedMinDayName();
 // @property-read string long name of month translated according to Carbon locale, in english if no translation available for current language
 case $name === 'monthName':
 return $this->getTranslatedMonthName();
 // @property-read string short name of month translated according to Carbon locale, in english if no translation available for current language
 case $name === 'shortMonthName':
 return $this->getTranslatedShortMonthName();
 // @property-read string lowercase meridiem mark translated according to Carbon locale, in latin if no translation available for current language
 case $name === 'meridiem':
 return $this->meridiem(\true);
 // @property-read string uppercase meridiem mark translated according to Carbon locale, in latin if no translation available for current language
 case $name === 'upperMeridiem':
 return $this->meridiem();
 // @property-read int current hour from 1 to 24
 case $name === 'noZeroHour':
 return $this->hour ?: 24;
 // @property int
 case $name === 'milliseconds':
 // @property int
 case $name === 'millisecond':
 // @property int
 case $name === 'milli':
 return (int) \floor($this->rawFormat('u') / 1000);
 // @property int 1 through 53
 case $name === 'week':
 return (int) $this->week();
 // @property int 1 through 53
 case $name === 'isoWeek':
 return (int) $this->isoWeek();
 // @property int year according to week format
 case $name === 'weekYear':
 return (int) $this->weekYear();
 // @property int year according to ISO week format
 case $name === 'isoWeekYear':
 return (int) $this->isoWeekYear();
 // @property-read int 51 through 53
 case $name === 'weeksInYear':
 return $this->weeksInYear();
 // @property-read int 51 through 53
 case $name === 'isoWeeksInYear':
 return $this->isoWeeksInYear();
 // @property-read int 1 through 5
 case $name === 'weekOfMonth':
 return (int) \ceil($this->day / static::DAYS_PER_WEEK);
 // @property-read int 1 through 5
 case $name === 'weekNumberInMonth':
 return (int) \ceil(($this->day + $this->avoidMutation()->startOfMonth()->dayOfWeekIso - 1) / static::DAYS_PER_WEEK);
 // @property-read int 0 through 6
 case $name === 'firstWeekDay':
 return $this->localTranslator ? $this->getTranslationMessage('first_day_of_week') ?? 0 : static::getWeekStartsAt();
 // @property-read int 0 through 6
 case $name === 'lastWeekDay':
 return $this->localTranslator ? (($this->getTranslationMessage('first_day_of_week') ?? 0) + static::DAYS_PER_WEEK - 1) % static::DAYS_PER_WEEK : static::getWeekEndsAt();
 // @property int 1 through 366
 case $name === 'dayOfYear':
 return 1 + (int) $this->rawFormat('z');
 // @property-read int 365 or 366
 case $name === 'daysInYear':
 return $this->isLeapYear() ? 366 : 365;
 // @property int does a diffInYears() with default parameters
 case $name === 'age':
 return $this->diffInYears();
 // @property-read int the quarter of this instance, 1 - 4
 // @call isSameUnit
 case $name === 'quarter':
 return (int) \ceil($this->month / static::MONTHS_PER_QUARTER);
 // @property-read int the decade of this instance
 // @call isSameUnit
 case $name === 'decade':
 return (int) \ceil($this->year / static::YEARS_PER_DECADE);
 // @property-read int the century of this instance
 // @call isSameUnit
 case $name === 'century':
 $factor = 1;
 $year = $this->year;
 if ($year < 0) {
 $year = -$year;
 $factor = -1;
 }
 return (int) ($factor * \ceil($year / static::YEARS_PER_CENTURY));
 // @property-read int the millennium of this instance
 // @call isSameUnit
 case $name === 'millennium':
 $factor = 1;
 $year = $this->year;
 if ($year < 0) {
 $year = -$year;
 $factor = -1;
 }
 return (int) ($factor * \ceil($year / static::YEARS_PER_MILLENNIUM));
 // @property int the timezone offset in seconds from UTC
 case $name === 'offset':
 return $this->getOffset();
 // @property int the timezone offset in minutes from UTC
 case $name === 'offsetMinutes':
 return $this->getOffset() / static::SECONDS_PER_MINUTE;
 // @property int the timezone offset in hours from UTC
 case $name === 'offsetHours':
 return $this->getOffset() / static::SECONDS_PER_MINUTE / static::MINUTES_PER_HOUR;
 // @property-read bool daylight savings time indicator, true if DST, false otherwise
 case $name === 'dst':
 return $this->rawFormat('I') === '1';
 // @property-read bool checks if the timezone is local, true if local, false otherwise
 case $name === 'local':
 return $this->getOffset() === $this->avoidMutation()->setTimezone(\date_default_timezone_get())->getOffset();
 // @property-read bool checks if the timezone is UTC, true if UTC, false otherwise
 case $name === 'utc':
 return $this->getOffset() === 0;
 // @property CarbonTimeZone $timezone the current timezone
 // @property CarbonTimeZone $tz alias of $timezone
 case $name === 'timezone' || $name === 'tz':
 return CarbonTimeZone::instance($this->getTimezone());
 // @property-read string $timezoneName the current timezone name
 // @property-read string $tzName alias of $timezoneName
 case $name === 'timezoneName' || $name === 'tzName':
 return $this->getTimezone()->getName();
 // @property-read string locale of the current instance
 case $name === 'locale':
 return $this->getTranslatorLocale();
 default:
 $macro = $this->getLocalMacro('get' . \ucfirst($name));
 if ($macro) {
 return $this->executeCallableWithContext($macro);
 }
 throw new UnknownGetterException($name);
 }
 }
 /**
 * Check if an attribute exists on the object
 *
 * @param string $name
 *
 * @return bool
 */
 public function __isset($name)
 {
 try {
 $this->__get($name);
 } catch (UnknownGetterException|ReflectionException $e) {
 return \false;
 }
 return \true;
 }
 /**
 * Set a part of the Carbon object
 *
 * @param string $name
 * @param string|int|DateTimeZone $value
 *
 * @throws UnknownSetterException|ReflectionException
 *
 * @return void
 */
 public function __set($name, $value)
 {
 if ($this->constructedObjectId === \spl_object_hash($this)) {
 $this->set($name, $value);
 return;
 }
 $this->{$name} = $value;
 }
 /**
 * Set a part of the Carbon object
 *
 * @param string|array $name
 * @param string|int|DateTimeZone $value
 *
 * @throws ImmutableException|UnknownSetterException
 *
 * @return $this
 */
 public function set($name, $value = null)
 {
 if ($this->isImmutable()) {
 throw new ImmutableException(\sprintf('%s class', static::class));
 }
 if (\is_array($name)) {
 foreach ($name as $key => $value) {
 $this->set($key, $value);
 }
 return $this;
 }
 switch ($name) {
 case 'milliseconds':
 case 'millisecond':
 case 'milli':
 case 'microseconds':
 case 'microsecond':
 case 'micro':
 if (\str_starts_with($name, 'milli')) {
 $value *= 1000;
 }
 while ($value < 0) {
 $this->subSecond();
 $value += static::MICROSECONDS_PER_SECOND;
 }
 while ($value >= static::MICROSECONDS_PER_SECOND) {
 $this->addSecond();
 $value -= static::MICROSECONDS_PER_SECOND;
 }
 $this->modify($this->rawFormat('H:i:s.') . \str_pad((string) \round($value), 6, '0', \STR_PAD_LEFT));
 break;
 case 'year':
 case 'month':
 case 'day':
 case 'hour':
 case 'minute':
 case 'second':
 [$year, $month, $day, $hour, $minute, $second] = \array_map('intval', \explode('-', $this->rawFormat('Y-n-j-G-i-s')));
 ${$name} = $value;
 $this->setDateTime($year, $month, $day, $hour, $minute, $second);
 break;
 case 'week':
 $this->week($value);
 break;
 case 'isoWeek':
 $this->isoWeek($value);
 break;
 case 'weekYear':
 $this->weekYear($value);
 break;
 case 'isoWeekYear':
 $this->isoWeekYear($value);
 break;
 case 'dayOfYear':
 $this->addDays($value - $this->dayOfYear);
 break;
 case 'timestamp':
 $this->setTimestamp($value);
 break;
 case 'offset':
 $this->setTimezone(static::safeCreateDateTimeZone($value / static::SECONDS_PER_MINUTE / static::MINUTES_PER_HOUR));
 break;
 case 'offsetMinutes':
 $this->setTimezone(static::safeCreateDateTimeZone($value / static::MINUTES_PER_HOUR));
 break;
 case 'offsetHours':
 $this->setTimezone(static::safeCreateDateTimeZone($value));
 break;
 case 'timezone':
 case 'tz':
 $this->setTimezone($value);
 break;
 default:
 $macro = $this->getLocalMacro('set' . \ucfirst($name));
 if ($macro) {
 $this->executeCallableWithContext($macro, $value);
 break;
 }
 if ($this->localStrictModeEnabled ?? static::isStrictModeEnabled()) {
 throw new UnknownSetterException($name);
 }
 $this->{$name} = $value;
 }
 return $this;
 }
 protected function getTranslatedFormByRegExp($baseKey, $keySuffix, $context, $subKey, $defaultValue)
 {
 $key = $baseKey . $keySuffix;
 $standaloneKey = "{$key}_standalone";
 $baseTranslation = $this->getTranslationMessage($key);
 if ($baseTranslation instanceof Closure) {
 return $baseTranslation($this, $context, $subKey) ?: $defaultValue;
 }
 if ($this->getTranslationMessage("{$standaloneKey}.{$subKey}") && (!$context || ($regExp = $this->getTranslationMessage("{$baseKey}_regexp")) && !\preg_match($regExp, $context))) {
 $key = $standaloneKey;
 }
 return $this->getTranslationMessage("{$key}.{$subKey}", null, $defaultValue);
 }
 /**
 * Get the translation of the current week day name (with context for languages with multiple forms).
 *
 * @param string|null $context whole format string
 * @param string $keySuffix "", "_short" or "_min"
 * @param string|null $defaultValue default value if translation missing
 *
 * @return string
 */
 public function getTranslatedDayName($context = null, $keySuffix = '', $defaultValue = null)
 {
 return $this->getTranslatedFormByRegExp('weekdays', $keySuffix, $context, $this->dayOfWeek, $defaultValue ?: $this->englishDayOfWeek);
 }
 /**
 * Get the translation of the current short week day name (with context for languages with multiple forms).
 *
 * @param string|null $context whole format string
 *
 * @return string
 */
 public function getTranslatedShortDayName($context = null)
 {
 return $this->getTranslatedDayName($context, '_short', $this->shortEnglishDayOfWeek);
 }
 /**
 * Get the translation of the current abbreviated week day name (with context for languages with multiple forms).
 *
 * @param string|null $context whole format string
 *
 * @return string
 */
 public function getTranslatedMinDayName($context = null)
 {
 return $this->getTranslatedDayName($context, '_min', $this->shortEnglishDayOfWeek);
 }
 /**
 * Get the translation of the current month day name (with context for languages with multiple forms).
 *
 * @param string|null $context whole format string
 * @param string $keySuffix "" or "_short"
 * @param string|null $defaultValue default value if translation missing
 *
 * @return string
 */
 public function getTranslatedMonthName($context = null, $keySuffix = '', $defaultValue = null)
 {
 return $this->getTranslatedFormByRegExp('months', $keySuffix, $context, $this->month - 1, $defaultValue ?: $this->englishMonth);
 }
 /**
 * Get the translation of the current short month day name (with context for languages with multiple forms).
 *
 * @param string|null $context whole format string
 *
 * @return string
 */
 public function getTranslatedShortMonthName($context = null)
 {
 return $this->getTranslatedMonthName($context, '_short', $this->shortEnglishMonth);
 }
 /**
 * Get/set the day of year.
 *
 * @param int|null $value new value for day of year if using as setter.
 *
 * @return static|int
 */
 public function dayOfYear($value = null)
 {
 $dayOfYear = $this->dayOfYear;
 return $value === null ? $dayOfYear : $this->addDays($value - $dayOfYear);
 }
 /**
 * Get/set the weekday from 0 (Sunday) to 6 (Saturday).
 *
 * @param int|null $value new value for weekday if using as setter.
 *
 * @return static|int
 */
 public function weekday($value = null)
 {
 $dayOfWeek = ($this->dayOfWeek + 7 - (int) ($this->getTranslationMessage('first_day_of_week') ?? 0)) % 7;
 return $value === null ? $dayOfWeek : $this->addDays($value - $dayOfWeek);
 }
 /**
 * Get/set the ISO weekday from 1 (Monday) to 7 (Sunday).
 *
 * @param int|null $value new value for weekday if using as setter.
 *
 * @return static|int
 */
 public function isoWeekday($value = null)
 {
 $dayOfWeekIso = $this->dayOfWeekIso;
 return $value === null ? $dayOfWeekIso : $this->addDays($value - $dayOfWeekIso);
 }
 /**
 * Set any unit to a new value without overflowing current other unit given.
 *
 * @param string $valueUnit unit name to modify
 * @param int $value new value for the input unit
 * @param string $overflowUnit unit name to not overflow
 *
 * @return static
 */
 public function setUnitNoOverflow($valueUnit, $value, $overflowUnit)
 {
 try {
 $original = $this->avoidMutation();
 /** @var static $date */
 $date = $this->{$valueUnit}($value);
 $end = $original->avoidMutation()->endOf($overflowUnit);
 $start = $original->avoidMutation()->startOf($overflowUnit);
 if ($date < $start) {
 $date = $date->setDateTimeFrom($start);
 } elseif ($date > $end) {
 $date = $date->setDateTimeFrom($end);
 }
 return $date;
 } catch (BadMethodCallException|ReflectionException $exception) {
 throw new UnknownUnitException($valueUnit, 0, $exception);
 }
 }
 /**
 * Add any unit to a new value without overflowing current other unit given.
 *
 * @param string $valueUnit unit name to modify
 * @param int $value amount to add to the input unit
 * @param string $overflowUnit unit name to not overflow
 *
 * @return static
 */
 public function addUnitNoOverflow($valueUnit, $value, $overflowUnit)
 {
 return $this->setUnitNoOverflow($valueUnit, $this->{$valueUnit} + $value, $overflowUnit);
 }
 /**
 * Subtract any unit to a new value without overflowing current other unit given.
 *
 * @param string $valueUnit unit name to modify
 * @param int $value amount to subtract to the input unit
 * @param string $overflowUnit unit name to not overflow
 *
 * @return static
 */
 public function subUnitNoOverflow($valueUnit, $value, $overflowUnit)
 {
 return $this->setUnitNoOverflow($valueUnit, $this->{$valueUnit} - $value, $overflowUnit);
 }
 /**
 * Returns the minutes offset to UTC if no arguments passed, else set the timezone with given minutes shift passed.
 *
 * @param int|null $minuteOffset
 *
 * @return int|static
 */
 public function utcOffset(int $minuteOffset = null)
 {
 if (\func_num_args() < 1) {
 return $this->offsetMinutes;
 }
 return $this->setTimezone(CarbonTimeZone::createFromMinuteOffset($minuteOffset));
 }
 /**
 * Set the date with gregorian year, month and day numbers.
 *
 * @see https://php.net/manual/en/datetime.setdate.php
 *
 * @param int $year
 * @param int $month
 * @param int $day
 *
 * @return static
 */
 #[\ReturnTypeWillChange]
 public function setDate($year, $month, $day)
 {
 return parent::setDate((int) $year, (int) $month, (int) $day);
 }
 /**
 * Set a date according to the ISO 8601 standard - using weeks and day offsets rather than specific dates.
 *
 * @see https://php.net/manual/en/datetime.setisodate.php
 *
 * @param int $year
 * @param int $week
 * @param int $day
 *
 * @return static
 */
 #[\ReturnTypeWillChange]
 public function setISODate($year, $week, $day = 1)
 {
 return parent::setISODate((int) $year, (int) $week, (int) $day);
 }
 /**
 * Set the date and time all together.
 *
 * @param int $year
 * @param int $month
 * @param int $day
 * @param int $hour
 * @param int $minute
 * @param int $second
 * @param int $microseconds
 *
 * @return static
 */
 public function setDateTime($year, $month, $day, $hour, $minute, $second = 0, $microseconds = 0)
 {
 return $this->setDate($year, $month, $day)->setTime((int) $hour, (int) $minute, (int) $second, (int) $microseconds);
 }
 /**
 * Resets the current time of the DateTime object to a different time.
 *
 * @see https://php.net/manual/en/datetime.settime.php
 *
 * @param int $hour
 * @param int $minute
 * @param int $second
 * @param int $microseconds
 *
 * @return static
 */
 #[\ReturnTypeWillChange]
 public function setTime($hour, $minute, $second = 0, $microseconds = 0)
 {
 return parent::setTime((int) $hour, (int) $minute, (int) $second, (int) $microseconds);
 }
 /**
 * Set the instance's timestamp.
 *
 * Timestamp input can be given as int, float or a string containing one or more numbers.
 *
 * @param float|int|string $unixTimestamp
 *
 * @return static
 */
 #[\ReturnTypeWillChange]
 public function setTimestamp($unixTimestamp)
 {
 [$timestamp, $microseconds] = self::getIntegerAndDecimalParts($unixTimestamp);
 return parent::setTimestamp((int) $timestamp)->setMicroseconds((int) $microseconds);
 }
 /**
 * Set the time by time string.
 *
 * @param string $time
 *
 * @return static
 */
 public function setTimeFromTimeString($time)
 {
 if (!\str_contains($time, ':')) {
 $time .= ':0';
 }
 return $this->modify($time);
 }
 /**
 * @alias setTimezone
 *
 * @param DateTimeZone|string $value
 *
 * @return static
 */
 public function timezone($value)
 {
 return $this->setTimezone($value);
 }
 /**
 * Set the timezone or returns the timezone name if no arguments passed.
 *
 * @param DateTimeZone|string $value
 *
 * @return static|string
 */
 public function tz($value = null)
 {
 if (\func_num_args() < 1) {
 return $this->tzName;
 }
 return $this->setTimezone($value);
 }
 /**
 * Set the instance's timezone from a string or object.
 *
 * @param DateTimeZone|string $value
 *
 * @return static
 */
 #[\ReturnTypeWillChange]
 public function setTimezone($value)
 {
 $tz = static::safeCreateDateTimeZone($value);
 if ($tz === \false && !self::isStrictModeEnabled()) {
 $tz = new CarbonTimeZone();
 }
 return parent::setTimezone($tz);
 }
 /**
 * Set the instance's timezone from a string or object and add/subtract the offset difference.
 *
 * @param DateTimeZone|string $value
 *
 * @return static
 */
 public function shiftTimezone($value)
 {
 $dateTimeString = $this->format('Y-m-d H:i:s.u');
 return $this->setTimezone($value)->modify($dateTimeString);
 }
 /**
 * Set the instance's timezone to UTC.
 *
 * @return static
 */
 public function utc()
 {
 return $this->setTimezone('UTC');
 }
 /**
 * Set the year, month, and date for this instance to that of the passed instance.
 *
 * @param Carbon|DateTimeInterface $date now if null
 *
 * @return static
 */
 public function setDateFrom($date = null)
 {
 $date = $this->resolveCarbon($date);
 return $this->setDate($date->year, $date->month, $date->day);
 }
 /**
 * Set the hour, minute, second and microseconds for this instance to that of the passed instance.
 *
 * @param Carbon|DateTimeInterface $date now if null
 *
 * @return static
 */
 public function setTimeFrom($date = null)
 {
 $date = $this->resolveCarbon($date);
 return $this->setTime($date->hour, $date->minute, $date->second, $date->microsecond);
 }
 /**
 * Set the date and time for this instance to that of the passed instance.
 *
 * @param Carbon|DateTimeInterface $date
 *
 * @return static
 */
 public function setDateTimeFrom($date = null)
 {
 $date = $this->resolveCarbon($date);
 return $this->modify($date->rawFormat('Y-m-d H:i:s.u'));
 }
 /**
 * Get the days of the week
 *
 * @return array
 */
 public static function getDays()
 {
 return static::$days;
 }
 ///////////////////////////////////////////////////////////////////
 /////////////////////// WEEK SPECIAL DAYS /////////////////////////
 ///////////////////////////////////////////////////////////////////
 private static function getFirstDayOfWeek() : int
 {
 return (int) static::getTranslationMessageWith(static::getTranslator(), 'first_day_of_week');
 }
 /**
 * Get the first day of week
 *
 * @return int
 */
 public static function getWeekStartsAt()
 {
 if (static::$weekStartsAt === static::WEEK_DAY_AUTO) {
 return self::getFirstDayOfWeek();
 }
 return static::$weekStartsAt;
 }
 /**
 * @deprecated To avoid conflict between different third-party libraries, static setters should not be used.
 * Use $weekEndsAt optional parameter instead when using endOfWeek method. You can also use the
 * 'first_day_of_week' locale setting to change the start of week according to current locale
 * selected and implicitly the end of week.
 *
 * Set the first day of week
 *
 * @param int|string $day week start day (or 'auto' to get the first day of week from Carbon::getLocale() culture).
 *
 * @return void
 */
 public static function setWeekStartsAt($day)
 {
 static::$weekStartsAt = $day === static::WEEK_DAY_AUTO ? $day : \max(0, (7 + $day) % 7);
 }
 /**
 * Get the last day of week
 *
 * @return int
 */
 public static function getWeekEndsAt()
 {
 if (static::$weekStartsAt === static::WEEK_DAY_AUTO) {
 return (int) (static::DAYS_PER_WEEK - 1 + self::getFirstDayOfWeek()) % static::DAYS_PER_WEEK;
 }
 return static::$weekEndsAt;
 }
 /**
 * @deprecated To avoid conflict between different third-party libraries, static setters should not be used.
 * Use $weekStartsAt optional parameter instead when using startOfWeek, floorWeek, ceilWeek
 * or roundWeek method. You can also use the 'first_day_of_week' locale setting to change the
 * start of week according to current locale selected and implicitly the end of week.
 *
 * Set the last day of week
 *
 * @param int|string $day week end day (or 'auto' to get the day before the first day of week
 * from Carbon::getLocale() culture).
 *
 * @return void
 */
 public static function setWeekEndsAt($day)
 {
 static::$weekEndsAt = $day === static::WEEK_DAY_AUTO ? $day : \max(0, (7 + $day) % 7);
 }
 /**
 * Get weekend days
 *
 * @return array
 */
 public static function getWeekendDays()
 {
 return static::$weekendDays;
 }
 /**
 * @deprecated To avoid conflict between different third-party libraries, static setters should not be used.
 * You should rather consider week-end is always saturday and sunday, and if you have some custom
 * week-end days to handle, give to those days an other name and create a macro for them:
 *
 * ```
 * Carbon::macro('isDayOff', function ($date) {
 * return $date->isSunday() || $date->isMonday();
 * });
 * Carbon::macro('isNotDayOff', function ($date) {
 * return !$date->isDayOff();
 * });
 * if ($someDate->isDayOff()) ...
 * if ($someDate->isNotDayOff()) ...
 * // Add 5 not-off days
 * $count = 5;
 * while ($someDate->isDayOff() || ($count-- > 0)) {
 * $someDate->addDay();
 * }
 * ```
 *
 * Set weekend days
 *
 * @param array $days
 *
 * @return void
 */
 public static function setWeekendDays($days)
 {
 static::$weekendDays = $days;
 }
 /**
 * Determine if a time string will produce a relative date.
 *
 * @param string $time
 *
 * @return bool true if time match a relative date, false if absolute or invalid time string
 */
 public static function hasRelativeKeywords($time)
 {
 if (!$time || \strtotime($time) === \false) {
 return \false;
 }
 $date1 = new DateTime('2000-01-01T00:00:00Z');
 $date1->modify($time);
 $date2 = new DateTime('2001-12-25T00:00:00Z');
 $date2->modify($time);
 return $date1 != $date2;
 }
 ///////////////////////////////////////////////////////////////////
 /////////////////////// STRING FORMATTING /////////////////////////
 ///////////////////////////////////////////////////////////////////
 /**
 * @deprecated To avoid conflict between different third-party libraries, static setters should not be used.
 * You should rather use UTF-8 language packages on every machine.
 *
 * Set if UTF8 will be used for localized date/time.
 *
 * @param bool $utf8
 */
 public static function setUtf8($utf8)
 {
 static::$utf8 = $utf8;
 }
 /**
 * Format the instance with the current locale. You can set the current
 * locale using setlocale() https://php.net/setlocale.
 *
 * @deprecated It uses OS language package and strftime() which is deprecated since PHP 8.1.
 * Use ->isoFormat() instead.
 * Deprecated since 2.55.0
 *
 * @param string $format
 *
 * @return string
 */
 public function formatLocalized($format)
 {
 // Check for Windows to find and replace the %e modifier correctly.
 if (\strtoupper(\substr(\PHP_OS, 0, 3)) === 'WIN') {
 $format = \preg_replace('#(?<!%)((?:%%)*)%e#', '\\1%#d', $format);
 // @codeCoverageIgnore
 }
 $formatted = \strftime($format, \strtotime($this->toDateTimeString()));
 return static::$utf8 ? \utf8_encode($formatted) : $formatted;
 }
 /**
 * Returns list of locale formats for ISO formatting.
 *
 * @param string|null $locale current locale used if null
 *
 * @return array
 */
 public function getIsoFormats($locale = null)
 {
 return ['LT' => $this->getTranslationMessage('formats.LT', $locale, 'h:mm A'), 'LTS' => $this->getTranslationMessage('formats.LTS', $locale, 'h:mm:ss A'), 'L' => $this->getTranslationMessage('formats.L', $locale, 'MM/DD/YYYY'), 'LL' => $this->getTranslationMessage('formats.LL', $locale, 'MMMM D, YYYY'), 'LLL' => $this->getTranslationMessage('formats.LLL', $locale, 'MMMM D, YYYY h:mm A'), 'LLLL' => $this->getTranslationMessage('formats.LLLL', $locale, 'dddd, MMMM D, YYYY h:mm A')];
 }
 /**
 * Returns list of calendar formats for ISO formatting.
 *
 * @param string|null $locale current locale used if null
 *
 * @return array
 */
 public function getCalendarFormats($locale = null)
 {
 return ['sameDay' => $this->getTranslationMessage('calendar.sameDay', $locale, '[Today at] LT'), 'nextDay' => $this->getTranslationMessage('calendar.nextDay', $locale, '[Tomorrow at] LT'), 'nextWeek' => $this->getTranslationMessage('calendar.nextWeek', $locale, 'dddd [at] LT'), 'lastDay' => $this->getTranslationMessage('calendar.lastDay', $locale, '[Yesterday at] LT'), 'lastWeek' => $this->getTranslationMessage('calendar.lastWeek', $locale, '[Last] dddd [at] LT'), 'sameElse' => $this->getTranslationMessage('calendar.sameElse', $locale, 'L')];
 }
 /**
 * Returns list of locale units for ISO formatting.
 *
 * @return array
 */
 public static function getIsoUnits()
 {
 static $units = null;
 if ($units === null) {
 $units = ['OD' => ['getAltNumber', ['day']], 'OM' => ['getAltNumber', ['month']], 'OY' => ['getAltNumber', ['year']], 'OH' => ['getAltNumber', ['hour']], 'Oh' => ['getAltNumber', ['h']], 'Om' => ['getAltNumber', ['minute']], 'Os' => ['getAltNumber', ['second']], 'D' => 'day', 'DD' => ['rawFormat', ['d']], 'Do' => ['ordinal', ['day', 'D']], 'd' => 'dayOfWeek', 'dd' => function (CarbonInterface $date, $originalFormat = null) {
 return $date->getTranslatedMinDayName($originalFormat);
 }, 'ddd' => function (CarbonInterface $date, $originalFormat = null) {
 return $date->getTranslatedShortDayName($originalFormat);
 }, 'dddd' => function (CarbonInterface $date, $originalFormat = null) {
 return $date->getTranslatedDayName($originalFormat);
 }, 'DDD' => 'dayOfYear', 'DDDD' => ['getPaddedUnit', ['dayOfYear', 3]], 'DDDo' => ['ordinal', ['dayOfYear', 'DDD']], 'e' => ['weekday', []], 'E' => 'dayOfWeekIso', 'H' => ['rawFormat', ['G']], 'HH' => ['rawFormat', ['H']], 'h' => ['rawFormat', ['g']], 'hh' => ['rawFormat', ['h']], 'k' => 'noZeroHour', 'kk' => ['getPaddedUnit', ['noZeroHour']], 'hmm' => ['rawFormat', ['gi']], 'hmmss' => ['rawFormat', ['gis']], 'Hmm' => ['rawFormat', ['Gi']], 'Hmmss' => ['rawFormat', ['Gis']], 'm' => 'minute', 'mm' => ['rawFormat', ['i']], 'a' => 'meridiem', 'A' => 'upperMeridiem', 's' => 'second', 'ss' => ['getPaddedUnit', ['second']], 'S' => function (CarbonInterface $date) {
 return (string) \floor($date->micro / 100000);
 }, 'SS' => function (CarbonInterface $date) {
 return \str_pad((string) \floor($date->micro / 10000), 2, '0', \STR_PAD_LEFT);
 }, 'SSS' => function (CarbonInterface $date) {
 return \str_pad((string) \floor($date->micro / 1000), 3, '0', \STR_PAD_LEFT);
 }, 'SSSS' => function (CarbonInterface $date) {
 return \str_pad((string) \floor($date->micro / 100), 4, '0', \STR_PAD_LEFT);
 }, 'SSSSS' => function (CarbonInterface $date) {
 return \str_pad((string) \floor($date->micro / 10), 5, '0', \STR_PAD_LEFT);
 }, 'SSSSSS' => ['getPaddedUnit', ['micro', 6]], 'SSSSSSS' => function (CarbonInterface $date) {
 return \str_pad((string) \floor($date->micro * 10), 7, '0', \STR_PAD_LEFT);
 }, 'SSSSSSSS' => function (CarbonInterface $date) {
 return \str_pad((string) \floor($date->micro * 100), 8, '0', \STR_PAD_LEFT);
 }, 'SSSSSSSSS' => function (CarbonInterface $date) {
 return \str_pad((string) \floor($date->micro * 1000), 9, '0', \STR_PAD_LEFT);
 }, 'M' => 'month', 'MM' => ['rawFormat', ['m']], 'MMM' => function (CarbonInterface $date, $originalFormat = null) {
 $month = $date->getTranslatedShortMonthName($originalFormat);
 $suffix = $date->getTranslationMessage('mmm_suffix');
 if ($suffix && $month !== $date->monthName) {
 $month .= $suffix;
 }
 return $month;
 }, 'MMMM' => function (CarbonInterface $date, $originalFormat = null) {
 return $date->getTranslatedMonthName($originalFormat);
 }, 'Mo' => ['ordinal', ['month', 'M']], 'Q' => 'quarter', 'Qo' => ['ordinal', ['quarter', 'M']], 'G' => 'isoWeekYear', 'GG' => ['getPaddedUnit', ['isoWeekYear']], 'GGG' => ['getPaddedUnit', ['isoWeekYear', 3]], 'GGGG' => ['getPaddedUnit', ['isoWeekYear', 4]], 'GGGGG' => ['getPaddedUnit', ['isoWeekYear', 5]], 'g' => 'weekYear', 'gg' => ['getPaddedUnit', ['weekYear']], 'ggg' => ['getPaddedUnit', ['weekYear', 3]], 'gggg' => ['getPaddedUnit', ['weekYear', 4]], 'ggggg' => ['getPaddedUnit', ['weekYear', 5]], 'W' => 'isoWeek', 'WW' => ['getPaddedUnit', ['isoWeek']], 'Wo' => ['ordinal', ['isoWeek', 'W']], 'w' => 'week', 'ww' => ['getPaddedUnit', ['week']], 'wo' => ['ordinal', ['week', 'w']], 'x' => ['valueOf', []], 'X' => 'timestamp', 'Y' => 'year', 'YY' => ['rawFormat', ['y']], 'YYYY' => ['getPaddedUnit', ['year', 4]], 'YYYYY' => ['getPaddedUnit', ['year', 5]], 'YYYYYY' => function (CarbonInterface $date) {
 return ($date->year < 0 ? '' : '+') . $date->getPaddedUnit('year', 6);
 }, 'z' => ['rawFormat', ['T']], 'zz' => 'tzName', 'Z' => ['getOffsetString', []], 'ZZ' => ['getOffsetString', ['']]];
 }
 return $units;
 }
 /**
 * Returns a unit of the instance padded with 0 by default or any other string if specified.
 *
 * @param string $unit Carbon unit name
 * @param int $length Length of the output (2 by default)
 * @param string $padString String to use for padding ("0" by default)
 * @param int $padType Side(s) to pad (STR_PAD_LEFT by default)
 *
 * @return string
 */
 public function getPaddedUnit($unit, $length = 2, $padString = '0', $padType = \STR_PAD_LEFT)
 {
 return ($this->{$unit} < 0 ? '-' : '') . \str_pad((string) \abs($this->{$unit}), $length, $padString, $padType);
 }
 /**
 * Return a property with its ordinal.
 *
 * @param string $key
 * @param string|null $period
 *
 * @return string
 */
 public function ordinal(string $key, ?string $period = null) : string
 {
 $number = $this->{$key};
 $result = $this->translate('ordinal', [':number' => $number, ':period' => (string) $period]);
 return (string) ($result === 'ordinal' ? $number : $result);
 }
 /**
 * Return the meridiem of the current time in the current locale.
 *
 * @param bool $isLower if true, returns lowercase variant if available in the current locale.
 *
 * @return string
 */
 public function meridiem(bool $isLower = \false) : string
 {
 $hour = $this->hour;
 $index = $hour < 12 ? 0 : 1;
 if ($isLower) {
 $key = 'meridiem.' . ($index + 2);
 $result = $this->translate($key);
 if ($result !== $key) {
 return $result;
 }
 }
 $key = "meridiem.{$index}";
 $result = $this->translate($key);
 if ($result === $key) {
 $result = $this->translate('meridiem', [':hour' => $this->hour, ':minute' => $this->minute, ':isLower' => $isLower]);
 if ($result === 'meridiem') {
 return $isLower ? $this->latinMeridiem : $this->latinUpperMeridiem;
 }
 } elseif ($isLower) {
 $result = \mb_strtolower($result);
 }
 return $result;
 }
 /**
 * Returns the alternative number for a given date property if available in the current locale.
 *
 * @param string $key date property
 *
 * @return string
 */
 public function getAltNumber(string $key) : string
 {
 return $this->translateNumber(\strlen($key) > 1 ? $this->{$key} : $this->rawFormat('h'));
 }
 /**
 * Format in the current language using ISO replacement patterns.
 *
 * @param string $format
 * @param string|null $originalFormat provide context if a chunk has been passed alone
 *
 * @return string
 */
 public function isoFormat(string $format, ?string $originalFormat = null) : string
 {
 $result = '';
 $length = \mb_strlen($format);
 $originalFormat = $originalFormat ?: $format;
 $inEscaped = \false;
 $formats = null;
 $units = null;
 for ($i = 0; $i < $length; $i++) {
 $char = \mb_substr($format, $i, 1);
 if ($char === '\\') {
 $result .= \mb_substr($format, ++$i, 1);
 continue;
 }
 if ($char === '[' && !$inEscaped) {
 $inEscaped = \true;
 continue;
 }
 if ($char === ']' && $inEscaped) {
 $inEscaped = \false;
 continue;
 }
 if ($inEscaped) {
 $result .= $char;
 continue;
 }
 $input = \mb_substr($format, $i);
 if (\preg_match('/^(LTS|LT|[Ll]{1,4})/', $input, $match)) {
 if ($formats === null) {
 $formats = $this->getIsoFormats();
 }
 $code = $match[0];
 $sequence = $formats[$code] ?? \preg_replace_callback('/MMMM|MM|DD|dddd/', function ($code) {
 return \mb_substr($code[0], 1);
 }, $formats[\strtoupper($code)] ?? '');
 $rest = \mb_substr($format, $i + \mb_strlen($code));
 $format = \mb_substr($format, 0, $i) . $sequence . $rest;
 $length = \mb_strlen($format);
 $input = $sequence . $rest;
 }
 if (\preg_match('/^' . CarbonInterface::ISO_FORMAT_REGEXP . '/', $input, $match)) {
 $code = $match[0];
 if ($units === null) {
 $units = static::getIsoUnits();
 }
 $sequence = $units[$code] ?? '';
 if ($sequence instanceof Closure) {
 $sequence = $sequence($this, $originalFormat);
 } elseif (\is_array($sequence)) {
 try {
 $sequence = $this->{$sequence[0]}(...$sequence[1]);
 } catch (ReflectionException|InvalidArgumentException|BadMethodCallException $e) {
 $sequence = '';
 }
 } elseif (\is_string($sequence)) {
 $sequence = $this->{$sequence} ?? $code;
 }
 $format = \mb_substr($format, 0, $i) . $sequence . \mb_substr($format, $i + \mb_strlen($code));
 $i += \mb_strlen((string) $sequence) - 1;
 $length = \mb_strlen($format);
 $char = $sequence;
 }
 $result .= $char;
 }
 return $result;
 }
 /**
 * List of replacements from date() format to isoFormat().
 *
 * @return array
 */
 public static function getFormatsToIsoReplacements()
 {
 static $replacements = null;
 if ($replacements === null) {
 $replacements = ['d' => \true, 'D' => 'ddd', 'j' => \true, 'l' => 'dddd', 'N' => \true, 'S' => function ($date) {
 $day = $date->rawFormat('j');
 return \str_replace((string) $day, '', $date->isoFormat('Do'));
 }, 'w' => \true, 'z' => \true, 'W' => \true, 'F' => 'MMMM', 'm' => \true, 'M' => 'MMM', 'n' => \true, 't' => \true, 'L' => \true, 'o' => \true, 'Y' => \true, 'y' => \true, 'a' => 'a', 'A' => 'A', 'B' => \true, 'g' => \true, 'G' => \true, 'h' => \true, 'H' => \true, 'i' => \true, 's' => \true, 'u' => \true, 'v' => \true, 'E' => \true, 'I' => \true, 'O' => \true, 'P' => \true, 'Z' => \true, 'c' => \true, 'r' => \true, 'U' => \true];
 }
 return $replacements;
 }
 /**
 * Format as ->format() do (using date replacements patterns from https://php.net/manual/en/function.date.php)
 * but translate words whenever possible (months, day names, etc.) using the current locale.
 *
 * @param string $format
 *
 * @return string
 */
 public function translatedFormat(string $format) : string
 {
 $replacements = static::getFormatsToIsoReplacements();
 $context = '';
 $isoFormat = '';
 $length = \mb_strlen($format);
 for ($i = 0; $i < $length; $i++) {
 $char = \mb_substr($format, $i, 1);
 if ($char === '\\') {
 $replacement = \mb_substr($format, $i, 2);
 $isoFormat .= $replacement;
 $i++;
 continue;
 }
 if (!isset($replacements[$char])) {
 $replacement = \preg_match('/^[A-Za-z]$/', $char) ? "\\{$char}" : $char;
 $isoFormat .= $replacement;
 $context .= $replacement;
 continue;
 }
 $replacement = $replacements[$char];
 if ($replacement === \true) {
 static $contextReplacements = null;
 if ($contextReplacements === null) {
 $contextReplacements = ['m' => 'MM', 'd' => 'DD', 't' => 'D', 'j' => 'D', 'N' => 'e', 'w' => 'e', 'n' => 'M', 'o' => 'YYYY', 'Y' => 'YYYY', 'y' => 'YY', 'g' => 'h', 'G' => 'H', 'h' => 'hh', 'H' => 'HH', 'i' => 'mm', 's' => 'ss'];
 }
 $isoFormat .= '[' . $this->rawFormat($char) . ']';
 $context .= $contextReplacements[$char] ?? ' ';
 continue;
 }
 if ($replacement instanceof Closure) {
 $replacement = '[' . $replacement($this) . ']';
 $isoFormat .= $replacement;
 $context .= $replacement;
 continue;
 }
 $isoFormat .= $replacement;
 $context .= $replacement;
 }
 return $this->isoFormat($isoFormat, $context);
 }
 /**
 * Returns the offset hour and minute formatted with +/- and a given separator (":" by default).
 * For example, if the time zone is 9 hours 30 minutes, you'll get "+09:30", with "@@" as first
 * argument, "+09@@30", with "" as first argument, "+0930". Negative offset will return something
 * like "-12:00".
 *
 * @param string $separator string to place between hours and minutes (":" by default)
 *
 * @return string
 */
 public function getOffsetString($separator = ':')
 {
 $second = $this->getOffset();
 $symbol = $second < 0 ? '-' : '+';
 $minute = \abs($second) / static::SECONDS_PER_MINUTE;
 $hour = \str_pad((string) \floor($minute / static::MINUTES_PER_HOUR), 2, '0', \STR_PAD_LEFT);
 $minute = \str_pad((string) ($minute % static::MINUTES_PER_HOUR), 2, '0', \STR_PAD_LEFT);
 return "{$symbol}{$hour}{$separator}{$minute}";
 }
 protected static function executeStaticCallable($macro, ...$parameters)
 {
 return static::bindMacroContext(null, function () use(&$macro, &$parameters) {
 if ($macro instanceof Closure) {
 $boundMacro = @Closure::bind($macro, null, static::class);
 return ($boundMacro ?: $macro)(...$parameters);
 }
 return $macro(...$parameters);
 });
 }
 /**
 * Dynamically handle calls to the class.
 *
 * @param string $method magic method name called
 * @param array $parameters parameters list
 *
 * @throws BadMethodCallException
 *
 * @return mixed
 */
 public static function __callStatic($method, $parameters)
 {
 if (!static::hasMacro($method)) {
 foreach (static::getGenericMacros() as $callback) {
 try {
 return static::executeStaticCallable($callback, $method, ...$parameters);
 } catch (BadMethodCallException $exception) {
 continue;
 }
 }
 if (static::isStrictModeEnabled()) {
 throw new UnknownMethodException(\sprintf('%s::%s', static::class, $method));
 }
 return null;
 }
 return static::executeStaticCallable(static::$globalMacros[$method], ...$parameters);
 }
 /**
 * Set specified unit to new given value.
 *
 * @param string $unit year, month, day, hour, minute, second or microsecond
 * @param int $value new value for given unit
 *
 * @return static
 */
 public function setUnit($unit, $value = null)
 {
 $unit = static::singularUnit($unit);
 $dateUnits = ['year', 'month', 'day'];
 if (\in_array($unit, $dateUnits)) {
 return $this->setDate(...\array_map(function ($name) use($unit, $value) {
 return (int) ($name === $unit ? $value : $this->{$name});
 }, $dateUnits));
 }
 $units = ['hour', 'minute', 'second', 'micro'];
 if ($unit === 'millisecond' || $unit === 'milli') {
 $value *= 1000;
 $unit = 'micro';
 } elseif ($unit === 'microsecond') {
 $unit = 'micro';
 }
 return $this->setTime(...\array_map(function ($name) use($unit, $value) {
 return (int) ($name === $unit ? $value : $this->{$name});
 }, $units));
 }
 /**
 * Returns standardized singular of a given singular/plural unit name (in English).
 *
 * @param string $unit
 *
 * @return string
 */
 public static function singularUnit(string $unit) : string
 {
 $unit = \rtrim(\mb_strtolower($unit), 's');
 if ($unit === 'centurie') {
 return 'century';
 }
 if ($unit === 'millennia') {
 return 'millennium';
 }
 return $unit;
 }
 /**
 * Returns standardized plural of a given singular/plural unit name (in English).
 *
 * @param string $unit
 *
 * @return string
 */
 public static function pluralUnit(string $unit) : string
 {
 $unit = \rtrim(\strtolower($unit), 's');
 if ($unit === 'century') {
 return 'centuries';
 }
 if ($unit === 'millennium' || $unit === 'millennia') {
 return 'millennia';
 }
 return "{$unit}s";
 }
 protected function executeCallable($macro, ...$parameters)
 {
 if ($macro instanceof Closure) {
 $boundMacro = @$macro->bindTo($this, static::class) ?: @$macro->bindTo(null, static::class);
 return ($boundMacro ?: $macro)(...$parameters);
 }
 return $macro(...$parameters);
 }
 protected function executeCallableWithContext($macro, ...$parameters)
 {
 return static::bindMacroContext($this, function () use(&$macro, &$parameters) {
 return $this->executeCallable($macro, ...$parameters);
 });
 }
 protected static function getGenericMacros()
 {
 foreach (static::$globalGenericMacros as $list) {
 foreach ($list as $macro) {
 (yield $macro);
 }
 }
 }
 /**
 * Dynamically handle calls to the class.
 *
 * @param string $method magic method name called
 * @param array $parameters parameters list
 *
 * @throws UnknownMethodException|BadMethodCallException|ReflectionException|Throwable
 *
 * @return mixed
 */
 public function __call($method, $parameters)
 {
 $diffSizes = [
 // @mode diffForHumans
 'short' => \true,
 // @mode diffForHumans
 'long' => \false,
 ];
 $diffSyntaxModes = [
 // @call diffForHumans
 'Absolute' => CarbonInterface::DIFF_ABSOLUTE,
 // @call diffForHumans
 'Relative' => CarbonInterface::DIFF_RELATIVE_AUTO,
 // @call diffForHumans
 'RelativeToNow' => CarbonInterface::DIFF_RELATIVE_TO_NOW,
 // @call diffForHumans
 'RelativeToOther' => CarbonInterface::DIFF_RELATIVE_TO_OTHER,
 ];
 $sizePattern = \implode('|', \array_keys($diffSizes));
 $syntaxPattern = \implode('|', \array_keys($diffSyntaxModes));
 if (\preg_match("/^(?<size>{$sizePattern})(?<syntax>{$syntaxPattern})DiffForHumans\$/", $method, $match)) {
 $dates = \array_filter($parameters, function ($parameter) {
 return $parameter instanceof DateTimeInterface;
 });
 $other = null;
 if (\count($dates)) {
 $key = \key($dates);
 $other = \current($dates);
 \array_splice($parameters, $key, 1);
 }
 return $this->diffForHumans($other, $diffSyntaxModes[$match['syntax']], $diffSizes[$match['size']], ...$parameters);
 }
 $roundedValue = $this->callRoundMethod($method, $parameters);
 if ($roundedValue !== null) {
 return $roundedValue;
 }
 $unit = \rtrim($method, 's');
 if (\str_starts_with($unit, 'is')) {
 $word = \substr($unit, 2);
 if (\in_array($word, static::$days)) {
 return $this->isDayOfWeek($word);
 }
 switch ($word) {
 // @call is Check if the current instance has UTC timezone. (Both isUtc and isUTC cases are valid.)
 case 'Utc':
 case 'UTC':
 return $this->utc;
 // @call is Check if the current instance has non-UTC timezone.
 case 'Local':
 return $this->local;
 // @call is Check if the current instance is a valid date.
 case 'Valid':
 return $this->year !== 0;
 // @call is Check if the current instance is in a daylight saving time.
 case 'DST':
 return $this->dst;
 }
 }
 $action = \substr($unit, 0, 3);
 $overflow = null;
 if ($action === 'set') {
 $unit = \strtolower(\substr($unit, 3));
 }
 if (\in_array($unit, static::$units)) {
 return $this->setUnit($unit, ...$parameters);
 }
 if ($action === 'add' || $action === 'sub') {
 $unit = \substr($unit, 3);
 if (\str_starts_with($unit, 'Real')) {
 $unit = static::singularUnit(\substr($unit, 4));
 return $this->{"{$action}RealUnit"}($unit, ...$parameters);
 }
 if (\preg_match('/^(Month|Quarter|Year|Decade|Century|Centurie|Millennium|Millennia)s?(No|With|Without|WithNo)Overflow$/', $unit, $match)) {
 $unit = $match[1];
 $overflow = $match[2] === 'With';
 }
 $unit = static::singularUnit($unit);
 }
 if (static::isModifiableUnit($unit)) {
 return $this->{"{$action}Unit"}($unit, $parameters[0] ?? 1, $overflow);
 }
 $sixFirstLetters = \substr($unit, 0, 6);
 $factor = -1;
 if ($sixFirstLetters === 'isLast') {
 $sixFirstLetters = 'isNext';
 $factor = 1;
 }
 if ($sixFirstLetters === 'isNext') {
 $lowerUnit = \strtolower(\substr($unit, 6));
 if (static::isModifiableUnit($lowerUnit)) {
 return $this->copy()->addUnit($lowerUnit, $factor, \false)->isSameUnit($lowerUnit, ...$parameters);
 }
 }
 if ($sixFirstLetters === 'isSame') {
 try {
 return $this->isSameUnit(\strtolower(\substr($unit, 6)), ...$parameters);
 } catch (BadComparisonUnitException $exception) {
 // Try next
 }
 }
 if (\str_starts_with($unit, 'isCurrent')) {
 try {
 return $this->isCurrentUnit(\strtolower(\substr($unit, 9)));
 } catch (BadComparisonUnitException|BadMethodCallException $exception) {
 // Try next
 }
 }
 if (\str_ends_with($method, 'Until')) {
 try {
 $unit = static::singularUnit(\substr($method, 0, -5));
 return $this->range($parameters[0] ?? $this, $parameters[1] ?? 1, $unit);
 } catch (InvalidArgumentException $exception) {
 // Try macros
 }
 }
 return static::bindMacroContext($this, function () use(&$method, &$parameters) {
 $macro = $this->getLocalMacro($method);
 if (!$macro) {
 foreach ([$this->localGenericMacros ?: [], static::getGenericMacros()] as $list) {
 foreach ($list as $callback) {
 try {
 return $this->executeCallable($callback, $method, ...$parameters);
 } catch (BadMethodCallException $exception) {
 continue;
 }
 }
 }
 if ($this->localStrictModeEnabled ?? static::isStrictModeEnabled()) {
 throw new UnknownMethodException($method);
 }
 return null;
 }
 return $this->executeCallable($macro, ...$parameters);
 });
 }
}