public function range(TemporalField $field) { if ($field instanceof ChronoField) { if ($this->isSupported($field)) { $f = $field; switch ($f) { case CF::DAY_OF_MONTH(): case CF::DAY_OF_YEAR(): case CF::ALIGNED_WEEK_OF_MONTH(): return $this->isoDate->range($field); case CF::YEAR_OF_ERA(): $range = CF::YEAR()->range(); $max = $this->getProlepticYear() <= 0 ? -($range->getMinimum() + ThaiBuddhistChronology::YEARS_DIFFERENCE) + 1 : $range->getMaximum() + ThaiBuddhistChronology::YEARS_DIFFERENCE; return ValueRange::of(1, $max); } return $this->getChronology()->range($f); } throw new UnsupportedTemporalTypeException("Unsupported field: " . $field); } return $field->rangeRefinedBy($this); }
/** * Gets the range of valid values for the specified field. * <p> * The range object expresses the minimum and maximum valid values for a field. * This date-time is used to enhance the accuracy of the returned range. * If it is not possible to return the range, because the field is not supported * or for some other reason, an exception is thrown. * <p> * If the field is a {@link ChronoField} then the query is implemented here. * The {@link #isSupported(TemporalField) supported fields} will return * appropriate range instances. * All other {@code ChronoField} instances will throw an {@code UnsupportedTemporalTypeException}. * <p> * If the field is not a {@code ChronoField}, then the result of this method * is obtained by invoking {@code TemporalField.rangeRefinedBy(TemporalAccessor)} * passing {@code this} as the argument. * Whether the range can be obtained is determined by the field. * * @param TemporalField $field the field to query the range for, not null * @return ValueRange the range of valid values for the field, not null * @throws DateTimeException if the range for the field cannot be obtained * @throws UnsupportedTemporalTypeException if the field is not supported */ public function range(TemporalField $field) { if ($field instanceof ChronoField) { $f = $field; return $f->isTimeBased() ? $this->time->range($field) : $this->date->range($field); } return $field->rangeRefinedBy($this); }