← Voltar para 6. Datas, Horários & Auditoria
6. Datas, Horários & Auditoria

DATE (Apenas Data: AAAA-MM-DD)

Armazena somente ano, mês e dia (ex: 1995-08-24), sem horário nem fuso horário.

💾 Espaço em Disco: 3 Bytes (MySQL) | 4 Bytes (PostgreSQL) 📏 Limites: De 1000-01-01 até 9999-12-31

O tipo DATE ocupa apenas 3 bytes e utiliza o formato universal ISO 8601 (`YYYY-MM-DD`). É ideal para eventos civis que não dependem de hora nem sofrem alteração por fuso horário (uma pessoa nascida em 10/05/1990 continua tendo nascido em 10/05/1990 em qualquer país do mundo).

✅ Quando Usar

  • •Data de nascimento (`data_nascimento DATE`).
  • •Data de vencimento de boleto/fatura (`data_vencimento DATE`).
  • •Data de admissão, feriados ou início de vigência de contrato.

🚫 Quando NÃO Usar

  • •Quando você precisa saber a hora e minuto exatos em que algo ocorreu (use `DATETIME` ou `TIMESTAMP`).
  • •Nunca salve datas como `VARCHAR(10)` no formato `DD/MM/AAAA`! Isso impede o banco de ordenar por data (`ORDER BY`) ou calcular intervalos (`DATEDIFF`). Formate para `d/m/Y` apenas na tela com PHP!

📐 Configuração no DrawDB

Type:
DATE
Size / Values:
Vazio
Default:
Vazio ou CURRENT_DATE
MySQL / MariaDB
DATE
PostgreSQL
DATE
SQLite
TEXT (formato YYYY-MM-DD)
🗄️ SQL DDL (Pronto para Importar no DrawDB)
CREATE TABLE faturas (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    cliente_id BIGINT UNSIGNED NOT NULL,
    valor DECIMAL(10, 2) NOT NULL,
    data_emissao DATE NOT NULL,
    data_vencimento DATE NOT NULL
);
🐘 Exemplo Prático em PHP 8 + PDO
<?php
declare(strict_types=1);

// 1. Convertendo data brasileira (DD/MM/YYYY) para padrão do banco (YYYY-MM-DD) com DateTimeImmutable
$inputUsuario = '25/12/2026';
$dataVencimento = DateTimeImmutable::createFromFormat('!d/m/Y', $inputUsuario);
$erros = DateTimeImmutable::getLastErrors();

if (!$dataVencimento || ($erros !== false && ($erros['warning_count'] > 0 || $erros['error_count'] > 0))) {
    throw new InvalidArgumentException('Data inválida.');
}

// 2. Salvando no banco no formato ISO Y-m-d
$stmt = $pdo->prepare('
    INSERT INTO faturas (cliente_id, valor, data_emissao, data_vencimento)
    VALUES (:cliente, :valor, :emissao, :vencimento)
');
$stmt->bindValue(':cliente', 10, PDO::PARAM_INT);
$stmt->bindValue(':valor', '250.00', PDO::PARAM_STR);
$stmt->bindValue(':emissao', (new DateTimeImmutable('today'))->format('Y-m-d'), PDO::PARAM_STR);
$stmt->bindValue(':vencimento', $dataVencimento->format('Y-m-d'), PDO::PARAM_STR);
$stmt->execute();

// 3. Ao exibir na tela em PHP:
echo 'Vencimento: ' . $dataVencimento->format('d/m/Y'); // 25/12/2026