public static function dateOfWeek($obj) : ?\DateTime
    {
        $oD = null;
        $wM = null;

        if ($obj !== null) {
            if (is_string($obj) === true) {
                $wM = self::weekMember($obj);
                $oD = self::dateOfWeek($wM);
            } else {
                if (is_array($obj) === true && isset($obj["year"]) === true && isset($obj["week"]) === true && isset($obj["day"]) === true) {
                    // ANO - Corrige valor fora dos limites válidos
                    $y = ($obj["year"] > 9999) ? 9999 : $obj["year"];
                    $y = ($y < 1) ? 1 : $y;

                    // SEMANA - Corrige valor fora dos limites válidos
                    $mW = self::weeksInYear($y);

                    $n = $obj["week"];
                    $n = ($n < 1) ? 1 : (($n > $mW) ? $mW : $n);

                    // Verifica set do dia da semana
                    $d = $obj["day"];

                    // DIA - Corrige valor fora dos limites válidos
                    $d = ($d < 1) ? 1 : (($d > 7) ? 7 : $d);

                    // Seta instância para o primeiro dia da primeira semana do ano alvo
                    $oD = self::firstWeekOfYear($y);

                    // Calcula quantidade de dias passados
                    $addD = ((($n - 1) * 7) + $d - 1);
                    $oD->add(new \DateInterval("P" . $addD . "D"));
                }
            }
        }

        return $oD;
    }