Funções matemáticas e de data

Calcular descontos, criar relatórios, exibir “publicado há 3 dias”, gerar números de pedidos — operações matemáticas e com datas são essenciais para qualquer aplicativo web.

1. Funções matemáticas comuns

PHP
<?php
// Basic operations
echo abs(-5);             // 5 (absolute value)
echo ceil(3.14);          // 4 (round up)
echo floor(3.99);         // 3 (round down)
echo round(3.5);          // 4 (rounds .5 to nearest even)
echo round(3.14159, 2);   // 3.14 (2 decimal places)

// Min and max
echo max(3, 7, 2, 9);     // 9 (maximum)
echo min(3, 7, 2, 9);     // 2 (minimum)
echo max([5, 3, 9, 1]);   // 9 (arrays work too)

// Powers and roots
echo pow(2, 3);           // 8 (2 to the power of 3)
echo sqrt(16);            // 4 (square root)

// Random numbers
echo rand(1, 100);        // Random integer between 1 and 100
echo mt_rand(1, 1000);    // High-quality random (recommended)
echo random_int(1, 10);   // Cryptographically secure random (PHP 7+)
?>
💡 Dica: Para gerar números aleatórios no dia a dia, use mt_rand() — ele é cerca de 4 vezes mais rápido e produz números aleatórios de melhor qualidade do que rand(). Para valores sensíveis em termos de segurança, como senhas e tokens, use random_int(), que é criptograficamente seguro.


2. A função date()

date() é a função mais utilizada do PHP para formatar datas e horários por meio de uma string de formato:

PHP
<?php
// Current date and time
echo date("Y-m-d");             // 2026-06-29
echo date("l, F j, Y");         // Monday, June 29, 2026
echo date("H:i:s");             // 14:30:45
echo date("Y-m-d H:i:s");       // 2026-06-29 14:30:45

// Day of week
echo date("l");                 // Monday (full weekday name)
echo date("w");                 // 1 (numeric day, 0 = Sunday)
?>

(1) Caracteres de formato comum

Caractere Significado Exemplo
Y Ano com quatro dígitos 2026
y Ano com dois dígitos 26
m Mês (com zeros à esquerda) 06
n Mês (sem preenchimento) 6
d Dia (com zeros à esquerda) 09
j Dia (sem preenchimento) 9
H 24 horas (com zeros à esquerda) 14
i Minutos (com zeros à esquerda) 30
s Segundos (com preenchimento com zeros) 45

▶ Exemplo: Conversões de carimbos de data/hora

PHP
<?php
// time(): current Unix timestamp (seconds since January 1, 1970)
$now = time();
echo $now;  // e.g. 1751101234

// date() accepts a timestamp as its second argument
echo date("Y-m-d H:i:s", $now);

// strtotime(): human-readable dates → timestamps
$ts = strtotime("2026-01-01 00:00:00");
echo date("F j, Y", $ts);  // January 1, 2026

// strtotime is surprisingly smart
echo date("Y-m-d", strtotime("+1 week"));     // One week from now
echo date("Y-m-d", strtotime("next Monday")); // Next Monday
echo date("Y-m-d", strtotime("last day of this month")); // Last day of this month
echo date("Y-m-d", strtotime("+3 months"));   // Three months from now
?>
▶ Experimente
💡 Dica: strtotime() compreende frases em linguagem natural como +1 week, next Monday e first day of next month. No entanto, não confie nela para cálculos complexos com datas — use a classe DateTime em vez disso.


3. A classe DateTime

date() e strtotime() abrangem os casos simples. Para qualquer coisa mais complexa, recorra à classe DateTime — ela é orientada a objetos e muito mais poderosa:

PHP
<?php
// Creating DateTime objects
$now = new DateTime();
$specific = new DateTime("2026-06-01 09:00:00");
$fromFormat = DateTime::createFromFormat("d/m/Y", "15/08/2026");

// Formatting output
echo $now->format("Y-m-d H:i:s");

// Adding and subtracting dates
$future = new DateTime();
$future->modify("+2 weeks");
$future->modify("+3 days");
echo $future->format("Y-m-d");  // Today + 17 days

// Calculating differences
$birthday = new DateTime("2000-01-15");
$today = new DateTime();
$diff = $birthday->diff($today);
echo "You have been alive for {$diff->days} days, {$diff->y} years";
// diff() returns a DateInterval object with y/m/d/h/i/s/days properties
?>

▶ Exemplo: Comparação de datas e intervalos

PHP
<?php
$start = new DateTime("2026-06-01");
$end   = new DateTime("2026-06-30");

// Comparing dates
if ($start < $end) {
    echo "Start date is before end date";
}

// Iterating over a date range
$period = new DateInterval("P7D");     // 7-day interval
$dates = new DatePeriod($start, $period, $end);
foreach ($dates as $date) {
    echo $date->format("m-d") . " ";
}
// Output: 06-01 06-08 06-15 06-22 06-29
?>
▶ Experimente

4. Configuração do fuso horário

PHP
<?php
// Set the timezone (do this once at the top of your script)
date_default_timezone_set("Asia/Shanghai");

echo date("Y-m-d H:i:s");  // Now shows Shanghai time

// Check the current timezone
echo date_default_timezone_get();  // Asia/Shanghai

// Common timezones:
// Asia/Shanghai    - China Standard Time (UTC+8)
// Asia/Tokyo       - Japan Standard Time (UTC+9)
// Europe/London    - Greenwich Mean Time / British Summer Time
// America/New_York - Eastern Time (UTC-5/UTC-4)
?>
⚠️ Atenção: O fuso horário padrão do PHP é o UTC. Se o seu site atende usuários de uma região específica, sempre chame date_default_timezone_set() no início do seu script. Sem isso, os carimbos de data e hora nos comentários dos usuários podem aparecer com um deslocamento de 8 horas.


5. Receitas com tâmaras para o dia a dia

PHP
<?php
// 1. Calculate age
function getAge(string $birthday): int {
    $born = new DateTime($birthday);
    $today = new DateTime();
    return $born->diff($today)->y;
}
echo getAge("2000-01-15");  // 26

// 2. Display relative time ("posted 3 days ago")
function timeAgo(string $datetime): string {
    $past = new DateTime($datetime);
    $now = new DateTime();
    $diff = $past->diff($now);

    if ($diff->y > 0)    return $diff->y . " year(s) ago";
    if ($diff->m > 0)    return $diff->m . " month(s) ago";
    if ($diff->d > 0)    return $diff->d . " day(s) ago";
    if ($diff->h > 0)    return $diff->h . " hour(s) ago";
    if ($diff->i > 0)    return $diff->i . " minute(s) ago";
    return "just now";
}

// 3. Generate an order number
function generateOrderNo(): string {
    return date("YmdHis") . mt_rand(1000, 9999);
}
echo generateOrderNo();  // 202606291430451234
?>

❓ Perguntas Frequentes

P: date() ou DateTime — qual devo usar? R: Use date() para formatação simples de uma linha. Opte por DateTime quando precisar calcular diferenças de datas, iterar sobre intervalos de datas, modificar datas ou compará-las.

P: Por que minha hora está 8 horas atrasada? R: Fuso horário. Chame date_default_timezone_set("Asia/Shanghai") no seu script (ou defina date.timezone = Asia/Shanghai no seu php.ini).

P: O que strtotime("2026/02/29") retorna? R: O dia 29 de fevereiro não existe em 2026. strtotime corrige automaticamente e retorna 2026-03-01. DateTime lida com isso da mesma forma.

📖 Resumo

📝 Exercícios

  1. Use date() para exibir a hora atual em três formatos diferentes: data ISO (AAAA-MM-DD), um formato completo e de fácil compreensão com o dia da semana e um formato compacto de 24 horas.
  2. Escreva uma função getDaysBetween($date1, $date2) que utilize DateTime para calcular o número de dias entre duas datas.
  3. Escreva uma função isWeekend($date) que retorne true se a data fornecida cair em um sábado ou domingo.
Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%