Verifica se a data é um feriado nacional
@param  DateTimeBr $datref
@return bool
358922
protected static function isFeriadoNacional($datref)
    {
       return in_array(str_pad($datref->getMonth(), 2, '0', STR_PAD_LEFT) . str_pad($datref->getDay(), 2, '0', STR_PAD_LEFT), @static::$feriados_nacionais);
    }
971047
private function reportNoRoleLinks( $linkbaseRef, $linkbase )
	{
		$xml_basename = basename( $linkbaseRef['href'] );

		$this->log()->taxonomy_validation( "4.3.3", "The content of the linkbase file does not match the role specified",
			array(
				'url' => "'$xml_basename'",
				'role' => "'{$linkbaseRef['role']}'",
				'link type' => $linkbase,
			)
		);
		return false;
	}
1244712
private function normalizar_34(array &$datos)
    {
        // completar con nodos por defecto
        $datos = \sasco\LibreDTE\Arreglo::mergeRecursiveDistinct([
            'Encabezado' => [
                'IdDoc' => false,
                'Emisor' => false,
                'Receptor' => false,
                'RUTSolicita' => false,
                'Totales' => [
                    'MntExe' => false,
                    'MntTotal' => 0,
                ]
            ],
        ], $datos);
        // normalizar datos
        $this->normalizar_detalle($datos);
        $this->normalizar_aplicar_descuentos_recargos($datos);
        $this->normalizar_agregar_IVA_MntTotal($datos);
    }
844973
public function isExpired(DateTime $dateTime)
    {
        if (null === $this->getExpiresIn()) {
            // if no expiry was indicated, assume it is valid
            return false;
        }

        // check to see if issuedAt + expiresIn > provided DateTime
        $expiresAt = clone $this->issuedAt;
        $expiresAt->add(new DateInterval(\sprintf('PT%dS', $this->getExpiresIn())));

        return $dateTime >= $expiresAt;
    }
616353
public function numeroFormatoBrParaSql($numero)
    {
        //Retira espaços
        $numero = trim($numero);

        //Retira separador de milhar com o ponto
        $numero = str_replace(".", "", $numero);

        //Substitui separador de decimal de virgula para ponto
        $numero = str_replace(",", ".", $numero);

        if (!is_numeric($numero)) {
            return false;
        }

        return $numero;
    }
860285
private function obtenerDatos($atributo, $valor){
        $referencia = strtolower($valor);
        $filtro = "(&($atributo=$referencia)(objectClass=$this->objeto))";
        $datos = $this->busqueda($this->cfgDominio['base'][$this->objeto], $filtro, $this->atributos);
        if (!$datos) {
            $this->existe = false;
            $this->esUnico = true;
        }elseif (count($datos) === 1 ) {
            $this->existe = true;
            $this->esUnico = true;
            $this->dnObjeto = $datos[0]['dn'];
            return $datos[0];
        }else{
            $this->esUnico = false;
            // TODO: Acaso no es acà que deberìas configurar un mensaje de error a enviar
//            throw new \ErrorException("El atributo $atributo debe ser único en el árbol LDAP");
        }
    }
784827
public function includes(DateTime $datetime)
	{
		return !$datetime->isBefore($this->start) && !$datetime->isAfter($this->end);
	}
143986
public static function fatorVencimento(\DateTime $data)
    {
        $dataBase = new \DateTime("1997-10-07");

        return (int)$data->diff($dataBase, true)->format('%r%a');
    }
72771
public function hasNodeRef(NodeRef $nodeRef, string $namespace = self::DEFAULT_NAMESPACE): bool
    {
        if (!isset($this->nodeRefs[$namespace])) {
            return false;
        }

        return isset($nodeRefs[$namespace][$nodeRef->toString()]);
    }
830728
public static function validateDatetimeIso8601($data, callable $filter=null) {
        if ( DateTime::createFromFormat(DateTime::ATOM, $data) === false ) return false;
        return self::applyFilter($data, $filter);
    }
1057946
public function getDataVencimento()
    {
        $data = $this->data_vencimento ? \DateTime::createFromFormat('dmy', sprintf('%06d', $this->data_vencimento)) : false;
        if ($data) {
            $data->setTime(0, 0, 0);
        }

        return $data;
    }
998010
private function normalizar_boletas(array &$datos)
    {
        // cambiar tags de DTE a boleta si se pasaron
        if ($datos['Encabezado']['Emisor']['RznSoc']) {
            $datos['Encabezado']['Emisor']['RznSocEmisor'] = $datos['Encabezado']['Emisor']['RznSoc'];
            $datos['Encabezado']['Emisor']['RznSoc'] = false;
        }
        if ($datos['Encabezado']['Emisor']['GiroEmis']) {
            $datos['Encabezado']['Emisor']['GiroEmisor'] = $datos['Encabezado']['Emisor']['GiroEmis'];
            $datos['Encabezado']['Emisor']['GiroEmis'] = false;
        }
        $datos['Encabezado']['Emisor']['Acteco'] = false;
        $datos['Encabezado']['Emisor']['Telefono'] = false;
        $datos['Encabezado']['Emisor']['CorreoEmisor'] = false;
        $datos['Encabezado']['Emisor']['CdgVendedor'] = false;
        $datos['Encabezado']['Receptor']['GiroRecep'] = false;
        if (!empty($datos['Encabezado']['Receptor']['CorreoRecep'])) {
            $datos['Referencia'][] = [
                'NroLinRef' => !empty($datos['Referencia']) ? (count($datos['Referencia'])+1) : 1,
                'RazonRef' => mb_substr('Email receptor: '.$datos['Encabezado']['Receptor']['CorreoRecep'], 0, 90),
            ];
        }
        $datos['Encabezado']['Receptor']['CorreoRecep'] = false;
        // quitar otros tags que no son parte de las boletas
        $datos['Encabezado']['IdDoc']['FmaPago'] = false;
        $datos['Encabezado']['IdDoc']['FchCancel'] = false;
        $datos['Encabezado']['IdDoc']['MedioPago'] = false;
        $datos['Encabezado']['IdDoc']['TpoCtaPago'] = false;
        $datos['Encabezado']['IdDoc']['NumCtaPago'] = false;
        $datos['Encabezado']['IdDoc']['BcoPago'] = false;
        $datos['Encabezado']['IdDoc']['TermPagoGlosa'] = false;
        $datos['Encabezado']['RUTSolicita'] = false;
        $datos['Encabezado']['IdDoc']['TpoTranCompra'] = false;
        $datos['Encabezado']['IdDoc']['TpoTranVenta'] = false;
        // si es boleta no nominativa se deja sólo el RUT en el campo del receptor
        /*if ($datos['Encabezado']['Receptor']['RUTRecep']=='66666666-6') {
            $datos['Encabezado']['Receptor'] = ['RUTRecep'=>'66666666-6'];
        }*/
        // ajustar las referencias si existen
        if (!empty($datos['Referencia'])) {
            if (!isset($datos['Referencia'][0])) {
                $datos['Referencia'] = [$datos['Referencia']];
            }
            foreach ($datos['Referencia'] as &$r) {
                foreach (['TpoDocRef', 'FolioRef', 'FchRef'] as $c) {
                    if (isset($r[$c])) {
                        unset($r[$c]);
                    }
                }
            }
        }
    }
885657
public function numeroFormatoSqlParaBr($numero)
    {
        //Retira espaços
        $numero = trim($numero);

        //Retira separador de milhar com a virgula
        $numero = str_replace(",", "", $numero);

        if (!is_numeric($numero)) {
            return false;
        }

        //Se não tiver ponto
        if (strpos($numero, '.') === false) {
            return number_format($numero, 0, ",", ".");
        }

        return number_format($numero, 2, ",", ".");
    }
590250
public function getDataGeracao()
    {
        $data = $this->header->data_de_geracao ? \DateTime::createFromFormat('dmy', sprintf('%06d', $this->header->data_de_geracao)) : false;
        if ($data) {
            $data->setTime(0, 0, 0);
        }

        return $data;
    }
198840
public function isValidDate($datetime, string $format = 'Y-m-d H:i:s'): bool
    {
        $dateType = DateTime::createFromFormat($format, $datetime);
        return (bool) ($dateType && $dateType->format($format) === $datetime);
    }
1027129
public static function verifyRC($rc)
    {
        // be liberal in what you receive
        if (!preg_match('#^\s*(\d\d)(\d\d)(\d\d)[ /]*(\d\d\d)(\d?)\s*$#', $rc, $matches)) {
            return false;
        }

        list(, $year, $month, $day, $ext, $c) = $matches;

        if ('' === $c) {
            $year += $year < 54 ? 1900 : 1800;
        } else {
            // kontrolní číslice
            $mod = ($year.$month.$day.$ext) % 11;
            if (10 === $mod) {
                $mod = 0;
            }
            if ($mod !== (int) $c) {
                return false;
            }

            $year += $year < 54 ? 2000 : 1900;
        }

        // k měsíci může být připočteno 20, 50 nebo 70
        if ($month > 70 && $year > 2003) {
            $month -= 70;
        } elseif ($month > 50) {
            $month -= 50;
        } elseif ($month > 20 && $year > 2003) {
            $month -= 20;
        }

        // kontrola data
        if (!checkdate($month, $day, $year)) {
            return false;
        }

        return true;
    }
1244483
public function equals(DateTimeBase $other) : bool
    {
        $dateTime      = $this->dateTime;
        $otherDateTime = $other->dateTime;

        return $dateTime == $otherDateTime
                && $dateTime->getTimezone()->getName() === $otherDateTime->getTimezone()->getName();
    }