public static function sub(DateTime $startDateTime, string $subTypeMethod, string $subType, int $subValue)
    {
        if (! is_callable([$startDateTime, $subTypeMethod])) {
            throw new Exception("Method `{$subTypeMethod}` is not callable on the given start date time instance.");
        }

        $startDateTime = $startDateTime->$subTypeMethod($subValue);

        $period = new static($startDateTime);

        return $period->setFixedDateTimes(false)
            ->setSubType($subType)
            ->setSubValue($subValue);
    }