Tutorial de PHP: Como Saber se um Ano é Bissexto (Algoritmo e Função Nativa)

🎯 O que você vai aprender nesta aula:

  • A matemática e a lógica por trás dos anos bissextos.
  • Como usar o operador de resto de divisão (%) junto com operadores lógicos.
  • Criar o algoritmo manual clássico cobrado em faculdades e testes lógicos.
  • Como usar o "jeito sênior" com a função nativa date() do PHP.

Todo programador, em algum momento da vida, vai precisar lidar com datas. E quando o assunto é data, fevereiro é sempre o mês problemático. Neste tutorial de PHP, vamos unir o que aprendemos sobre OPERADORES LÓGICOS para criar um script que descobre se um ano tem 365 ou 366 dias.

Como saber se um ano é bissexto no PHP?

Para verificar se um ano é bissexto em PHP, você pode usar uma equação lógica avaliando se o ano é múltiplo de 400, ou se é múltiplo de 4 mas não de 100. Alternativamente, basta usar a função nativa do PHP date('L', mktime(0, 0, 0, 1, 1, $ano)), que retorna 1 (TRUE) para anos bissextos.

A Lógica de Programação (O Algoritmo)

Antes de sairmos digitando código igual malucos, precisamos entender a regra do mundo real. Normalmente, temos 365 dias no ano, com fevereiro tendo 28 dias. Porém, a cada 4 anos, a Terra dá aquela atrasadinha básica na translação e precisamos adicionar um dia extra.

A regra matemática para o Algoritmo do Ano Bissexto é a seguinte:

  1. Todo ano múltiplo de 400 é sempre bissexto (Ex: 1600, 2000, 2400).
  2. OU: Os anos múltiplos de 4 são bissextos, EXCETO se forem também múltiplos de 100 (Ex: 1996, 2004, 2008, 2012 são bissextos. Já 1900 não é, pois é múltiplo de 100 mas não de 400).

Para testar múltiplos no PHP, usamos o operador matemático de módulo % (que nos dá o resto da divisão). Se $ano % 4 == 0, significa que a divisão por 4 é exata, logo, ele é múltiplo.

Criando o Script PHP Manualmente

Juntando nossa regra matemática com o IF E ELSE NO PHP e os operadores lógicos && (E) e || (OU), nosso código HTML + PHP fica assim:

<html>
<head>
    <title>Apostila PHP Progressivo</title>
</head>
<body>
    <!-- Formulário para o usuário digitar o ano -->
    <form action="" method="get">
        Digite o Ano (ex: 2024): <input type="number" name="year" required />
        <input type="submit" value="Testar" />
    </form> 

<?php 
    if(isset($_GET['year'])) {
        $ano = $_GET['year'];
        
        // A expressão mágica do ano bissexto
        if ( ($ano % 4 == 0 && $ano % 100 != 0) || $ano % 400 == 0 ) {
            echo "<p>O ano <b>$ano</b> É bissexto! (Fevereiro tem 29 dias)</p>";
        } else {
            echo "<p>O ano <b>$ano</b> NÃO é bissexto! (Fevereiro tem 28 dias)</p>";
        }
    }
?>
</body>
</html>

Preste muita atenção nos parênteses! Eles funcionam igualzinho na matemática da escola: garantem que o PHP resolva primeiro o bloco do && antes de comparar com o ||.

🧠 Matemática + Código te assusta?

Algoritmos clássicos como o do Ano Bissexto são figurinhas carimbadas em testes de emprego e provas de faculdade. O segredo não é decorar, é entender a lógica. Na nossa Apostila PHP Progressivo, você encontra dezenas de exercícios focados em desenvolver o seu raciocínio lógico, passo a passo, para estudar onde e quando quiser.

Baixar Apostila Completa →

O Jeito Sênior: Usando a Função Nativa do PHP

Fazer o algoritmo manual é excelente para treinar sua lógica de programação (e recomendo que você o faça!). Mas, no mundo corporativo do dia a dia, a regra número um é: não reinvente a roda.

O PHP já possui um gigantesco arsenal de funções prontas. Para trabalhar com datas, temos a poderosa FUNÇÃO DATE PHP. O parâmetro 'L' (maiúsculo) dessa função foi criado especificamente para verificar se um ano é bissexto. Ele retorna 1 (que vale como TRUE) se for, e 0 (que vale como FALSE) se não for.

Veja como o código fica absurdamente mais simples:

<?php 
    if(isset($_GET['year'])) {
        $ano = $_GET['year'];
        
        // mktime() cria um carimbo de data (timestamp) para o dia 1 de janeiro do ano digitado
        // date('L') avalia se o ano desse timestamp é bissexto
        $bissexto = date('L', mktime(0, 0, 0, 1, 1, $ano));
        
        if ($bissexto) {
            echo "<p>O ano $ano É bissexto! (Resolvido com função nativa)</p>";
        } else {
            echo "<p>O ano $ano NÃO é bissexto!</p>";
        }
    }
?>

💡 Dica de Mestre

Não se desespere se não entendeu a função mktime() agora. Iremos estudar manipulação avançada de datas e horas em um módulo específico mais adiante no nosso curso. O importante hoje é entender que no PHP, quase sempre existe uma função pronta para facilitar sua vida!


Sua lógica está ficando afiada! Que tal continuar evoluindo e dominar novas ferramentas do PHP?

Continuar Curso (Próxima Aula) »

Nenhum comentário:

Veja também: