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

TIME & YEAR (Hora Isolada e Ano)

TIME armazena horários do dia ou durações (HH:MM:SS); YEAR armazena um ano em 1 Byte.

💾 Espaço em Disco: TIME: 3 Bytes | YEAR: 1 Byte 📏 Limites: TIME: -838:59:59 a 838:59:59 | YEAR: 1901 a 2155

O tipo `TIME` (3 bytes) é ideal para horários recorrentes que independem de um dia específico, como horário de abertura e fechamento de uma loja (`08:00:00` às `18:00:00`). Já o tipo `YEAR` no MySQL ocupa apenas 1 byte para anos entre 1901 e 2155.

✅ Quando Usar

  • •Horário comercial de abertura e fechamento (`abre_as TIME`, `fecha_as TIME`).
  • •Horário de início de uma turma escolar (`horario_aula TIME`).

🚫 Quando NÃO Usar

  • •Para anos fora da faixa de 1901 a 2155 (use `SMALLINT` em vez de `YEAR` para maior compatibilidade com PostgreSQL e SQLite).

📐 Configuração no DrawDB

Type:
TIME
Size / Values:
Vazio
Default:
Ex: 08:00:00
MySQL / MariaDB
TIME
PostgreSQL
TIME
SQLite
TEXT
🗄️ SQL DDL (Pronto para Importar no DrawDB)
CREATE TABLE horarios_funcionamento (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    dia_semana TINYINT UNSIGNED NOT NULL COMMENT '1=Dom, 2=Seg ... 7=Sab',
    horario_abertura TIME NOT NULL,
    horario_fechamento TIME NOT NULL
);
🐘 Exemplo Prático em PHP 8 + PDO
<?php
declare(strict_types=1);

$abertura   = '08:30:00';
$fechamento = '18:00:00';

if (!preg_match('/^(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d$/', $abertura)) {
    throw new InvalidArgumentException('Horário inválido.');
}

$stmt = $pdo->prepare('
    INSERT INTO horarios_funcionamento (dia_semana, horario_abertura, horario_fechamento)
    VALUES (:dia, :abre, :fecha)
');
$stmt->bindValue(':dia', 2, PDO::PARAM_INT); // Segunda-feira
$stmt->bindValue(':abre', $abertura, PDO::PARAM_STR);
$stmt->bindValue(':fecha', $fechamento, PDO::PARAM_STR);
$stmt->execute();