/** * Constructor. * * @param TemporalField $field the field to format, validated not null * @param int $minWidth the minimum field width, from 1 to 10 * @param int $maxWidth the maximum field width, from 1 to 10 * @param int $baseValue the base value * @param ChronoLocalDate|null $baseDate the base date * @param int $subsequentWidth the subsequentWidth for this instance * @throws DateTimeException * @throws IllegalArgumentException */ public function __construct(TemporalField $field, $minWidth, $maxWidth, $baseValue, $baseDate, $subsequentWidth = 0) { parent::__construct($field, $minWidth, $maxWidth, SignStyle::NOT_NEGATIVE(), $subsequentWidth); $this->baseValue = $baseValue; $this->baseDate = $baseDate; if ($minWidth < 1 || $minWidth > 10) { throw new IllegalArgumentException("The minWidth must be from 1 to 10 inclusive but was " . $minWidth); } if ($maxWidth < 1 || $maxWidth > 10) { throw new IllegalArgumentException("The maxWidth must be from 1 to 10 inclusive but was " . $minWidth); } if ($maxWidth < $minWidth) { throw new IllegalArgumentException("Maximum width must exceed or equal the minimum width but " . $maxWidth . " < " . $minWidth); } if ($baseDate === null) { if ($field->range()->isValidValue($baseValue) === false) { throw new IllegalArgumentException("The base value must be within the range of the field"); } if ($baseValue + self::$EXCEED_POINTS[$maxWidth] > Integer::MAX_VALUE) { throw new DateTimeException("Unable to add printer-parser as the range exceeds the capacity of an int"); } } }