public function addTo(Temporal $temporal, $amount) { switch ($this) { case IsoFields::WEEK_BASED_YEARS(): return $temporal->with(IsoFields::WEEK_BASED_YEAR(), Math::addExact($temporal->get(IsoFields::WEEK_BASED_YEAR()), $amount)); case IsoFields::QUARTER_YEARS(): // no overflow (256 is multiple of 4) return $temporal->plus($amount / 256, ChronoUnit::YEARS())->plus($amount % 256 * 3, ChronoUnit::MONTHS()); default: throw new IllegalStateException("Unreachable"); } }
public function getRangeUnit() { return IsoFields::WEEK_BASED_YEARS(); }
public function rangeRefinedBy(TemporalAccessor $temporal) { if ($this->rangeUnit == ChronoUnit::WEEKS()) { // day-of-week return $this->range; } else { if ($this->rangeUnit == ChronoUnit::MONTHS()) { // week-of-month return $this->rangeByWeek($temporal, CF::DAY_OF_MONTH()); } else { if ($this->rangeUnit == ChronoUnit::YEARS()) { // week-of-year return $this->rangeByWeek($temporal, CF::DAY_OF_YEAR()); } else { if ($this->rangeUnit == IsoFields::WEEK_BASED_YEARS()) { return $this->rangeWeekOfWeekBasedYear($temporal); } else { if ($this->rangeUnit == ChronoUnit::FOREVER()) { return CF::YEAR()->range(); } else { throw new IllegalStateException("unreachable, rangeUnit: " . $this->rangeUnit . ", this: " . $this); } } } } } }