nfephp-org / sped-nfe

API para geração e comunicação das NFe com as SEFAZ autorizadoras
Other
1.2k stars 533 forks source link

Correção da captura do TimeZone para preencher a tag dhCont, para não utilizar o fuso horário do servidor #1059

Open Emerson-Gabriel opened 3 months ago

Emerson-Gabriel commented 3 months ago

Comportamento esperado

Ao realizar a geração de uma NF-e em contingência para a UF MT (fuso horário -04:00), a data/hora capturada no arquivo ContingencyNFe.php linha 49. Nesta linha é capturado o fuso horário -03:00, desconsiderando o TimeZone informado, o problema ocorre porque a função date("Y-m-d H:i:sP") usa o fuso horário do servidor ao gerar a string de data e hora.

Com isso o fuso horário informado pelo DateTimeZone é desconsiderado, ficando incoerente o XML, veja: Capturar

Ao avaliar o dhCont da tag infProt do retorno da sefaz está correto, veja: image

Ou seja, o componente desconsidera o TimeZone informado.

Solução possível

Para corrigir isso e assegurar que o DateTime devemos utilizar o offset correto de -04:00, deve-se criar a data e hora diretamente no fuso horário de Cuiabá. Isso evita problemas com offsets incorretos.

Possível implementação

No arquivo ContingencyNFe.php linha 49, devemos alterar a forma de captura da data e hora atual:

$tz = TimeZoneByUF::get(UFList::getUFByCode((int)$cUF)); $dt = new \DateTime('now', new \DateTimeZone($tz));