Arredondando Tempo em Segundos para o Próximo Quarto de Hora em PHP

Em várias situações práticas, pode ser útil arredondar um determinado intervalo de tempo para o próximo múltiplo de um quarto de hora (15 minutos). Por exemplo, pode ser que o faturamento de um serviço seja calculado com base em blocos de 15 minutos, de modo que um serviço que dura 12 minutos é cobrado da mesma forma que um serviço de 15 minutos.

Neste artigo, vamos mostrar como criar uma função PHP que aceita um intervalo de tempo em segundos e retorna o número de segundos arredondados para o próximo quarto de hora. Além disso, vamos apresentar uma função bônus que converte o tempo em segundos para o formato “hora:minutos:segundos”, facilitando a leitura do tempo.

A Função de Arredondamento

Vamos começar com a função de arredondamento:

phpCopy code<code>function arredondarParaProximoQuartoDeHora($segundos) {
    $minutos = $segundos / 60;
    $minutosArredondados = ceil($minutos / 15) * 15;
    $segundosArredondados = $minutosArredondados * 60;
    return $segundosArredondados;
}

Explicação da Função ceil()

A função ceil() é uma função matemática incorporada em muitas linguagens de programação, incluindo PHP. A palavra “ceil” é uma abreviação de “ceiling”, que significa “teto” em inglês. Como o nome sugere, a função ceil() arredonda um número para cima, para o número inteiro mais próximo.

Por exemplo, ceil(3.4) retornará 4, e ceil(5.9) retornará 6. Mesmo que o número seja já um número inteiro, ceil() ainda retornará esse número. Portanto, ceil(7) retornará 7.

No contexto de nosso exemplo de arredondamento para o próximo quarto de hora, usamos ceil() para garantir que, mesmo que o número de minutos seja menor que um múltiplo de 15, ele seja arredondado para o próximo múltiplo de 15. Por exemplo, se tivermos 12 minutos, quando dividimos 12 por 15, obtemos 0.8. Usando ceil(), arredondamos isso para 1, e então multiplicamos por 15 para obter 15 minutos.

A função ceil() é uma maneira eficaz e simples de arredondar números para cima e é extremamente útil em uma variedade de situações de programação.

A Função de Conversão de Tempo

Agora, vamos mostrar a função que converte segundos para o formato “hora:minutos:segundos”:

function converterSegundosParaTempo($segundos) {
    $horas = floor($segundos / 3600);
    $minutos = floor(($segundos / 60) % 60);
    $segundos = $segundos % 60;

    return sprintf("%02d:%02d:%02d", $horas, $minutos, $segundos);
}

Explicação da Função floor()

A função floor() é o oposto da função ceil(). Enquanto ceil() arredonda um número para cima, floor() arredonda um número para baixo. O termo “floor” traduzido para o português seria “chão”, indicando que estamos arredondando para baixo, em direção ao número inteiro mais próximo e menor.

Por exemplo, floor(3.9) retornará 3, e floor(5.1) retornará 5. Se o número já é um número inteiro, floor() ainda retornará esse número. Portanto, floor(7) retornará 7.

No contexto da função converterSegundosParaTempo que converte segundos para o formato “hora:minutos:segundos”, usamos floor() para dividir o número total de segundos por 3600 (o número de segundos em uma hora) e obter o número inteiro de horas, ignorando qualquer fração de uma hora que possa existir. Da mesma forma, usamos floor() para calcular o número inteiro de minutos.

A função floor() é uma maneira eficiente e simples de arredondar números para baixo, e é muito útil em várias situações de programação.

Usando as Funções

Agora que temos as funções, podemos usá-las e apresentar alguns exemplos em uma tabela.

Vamos supor que temos os seguintes tempos em segundos: 720 (12 minutos), 1920 (32 minutos), e 3600 (60 minutos). Veja como eles são arredondados para o próximo quarto de hora:

Tempo OriginalTempo ArredondadoTempo Original (formato hh:mm:ss)Tempo Arredondado (formato hh:mm:ss)
72090000:12:0000:15:00
1920240000:32:0000:40:00
3600360001:00:0001:00:00

Aqui está o código PHP que gera essa tabela:

$tempos = [720, 1920, 3600];

echo "| Tempo Original | Tempo Arredondado | Tempo Original (formato hh:mm:ss) | Tempo Arredondado (formato hh:mm:ss) |\n";
echo "|---|---|---|---|\n";

foreach ($tempos as $tempo) {
    $tempoArredondado = arredondarParaProximoQuartoDeHora($tempo);
    echo "| $tempo | $tempoArredondado | " . converterSegundosParaTempo($tempo) . " | " . converterSegundosParaTempo($tempoArredondado) . " |\n";
}

Conclusão

O PHP é uma linguagem poderosa que permite manipular tempo de maneira eficaz. Com a função arredondarParaProximoQuartoDeHora(), você pode facilmente arredondar qualquer intervalo de tempo para o próximo múltiplo de um quarto de hora. A função converterSegundosParaTempo() pode ser usada para converter o tempo em segundos para o formato “hora:minutos:segundos”, tornando o tempo mais legível. Esperamos que este artigo tenha sido útil para entender como implementar e usar estas funções!

Sobre o autor

Pós graduado em Gestão de Projetos em Tecnologia da Informação pela UNIASSELVI.
Esposo e Pai, curto atividades ao ar livre (Bike, SUP, Natação, Caminhar, Brincar no campo)

Atua com Banco de Dados Oracle desde de 2007. Atualmente é DBA Senior na FLUIDATA Serviços em Banco de dados (www.fluidata.com.br)

Principais atividade Banco de dados:

Implementação, migração, gerenciamento e suporte a produtos Oracle (8i, 9i, 10g, 11g, 12c, 18c, 19c RAC), multiplataforma;
Implementação, migração, gerenciamento e suporte a produtos Microsoft SQL Server (2008 - 2019);
Implementação, migração, gerenciamento e suporte a produtos PostgreSQL (9.3 - 14);
Monitoramento de ambientes 24×7;
Backup e Recovery;
Performance e Tuning;
Alta disponibilidade (HA);
EM database/grid/cloud control;
Conversão de databases;
Standby database / Oracle Data Guard;

Certificações:

Oracle Cloud Infrastructure 2019 Certified Architect AssociateOracle Cloud Infrastructure 2019 Certified Architect Associate
Oracle Database 12c Administrator Certified ProfessionalOracle Database 12c Administrator Certified Professional
Exadata Database Machine Models X2-2 and X2-8 Technology Support SpecialistExadata Database Machine Models X2-2 and X2-8 Technology Support Specialist
Oracle Database 11g Support SpecialistOracle Database 11g Support Specialist
OCP 11g - Oracle Certified Professional AdministratorOCP 11g - Oracle Certified Professional Administrator
OPN Certified Specialist 10g - PartnerNetwork Certified SpecialistOPN Certified Specialist 10g - PartnerNetwork Certified Specialist
Oracle Database 10g Real Applications Clusters AdministratorCertified ExpertOracle Database 10g Real Applications Clusters AdministratorCertified Expert
Oracle Database 10g: Managing Oracle on Linux Certified ExpertOracle Database 10g: Managing Oracle on Linux Certified Expert
OCP 10g - Oracle Certified Professional AdministratorOCP 10g - Oracle Certified Professional Administrator

Principais atividades DEVOPS:

PHP
ASP.net
C#
Docker
Golang
C++
Delphi
Python
HTML5
JavaScript

Você também pode gostar: