protected function setOpeningIntervals(array $openingIntervals)
    {
        if (empty($openingIntervals)) {
            throw new \InvalidArgumentException('The day must have at least one opening interval.');
        }

        $this->openingIntervals = [];

        foreach ($openingIntervals as $openingInterval) {
            if (!is_array($openingInterval) || !isset($openingInterval[0]) || !isset($openingInterval[1])) {
                throw new \InvalidArgumentException(
                    'Each interval must be an array containing opening and closing times.'
                );
            }

            $this->openingIntervals[] = TimeInterval::fromString($openingInterval[0], $openingInterval[1]);
        }

        usort($this->openingIntervals, function (TimeInterval $a, TimeInterval $b) {
            return ($a->getStart() > $b->getStart()) ? 1 : -1;
        });
    }