public function parse(DateTimeParseContext $context, $text, $position) { if ($this->optional) { $context->startOptional(); $pos = $position; foreach ($this->printerParsers as $pp) { $pos = $pp->parse($context, $text, $pos); if ($pos < 0) { $context->endOptional(false); return $position; // return original position } } $context->endOptional(true); return $pos; } else { foreach ($this->printerParsers as $pp) { $position = $pp->parse($context, $text, $position); if ($position < 0) { break; } } return $position; } }