Extrair data da foto do EXIF
Transforme a data gravada pela sua câmera, 2023:06:15 14:30:45, em data e hora normais: 2023-06-15 e 14:30:45, além do valor combinado 2023-06-15T14:30:45. Dias impossíveis são recusados e nenhum fuso horário é inventado. Grátis no seu navegador.
- Grátis
- Funciona no seu navegador
- Sem cadastro
- Seus dados não saem do seu aparelho
Executar grátis
Exemplo resolvido
- Data e hora originais
- 2023:06:15 14:30:45
- Data
- 2023-06-15
- Tempo
- 14:30:45
- Iso
- 2023-06-15T14:30:45
- Ano
- 2.023
Câmeras e telefones gravam o momento do disparo na etiqueta EXIF DateTimeOriginal com um layout peculiar separado por dois-pontos: ano, mês e dia unidos por dois-pontos, um espaço e depois horas, minutos e segundos. Pipelines que ordenam galerias, montam linhas do tempo ou carimbam nomes de arquivo precisam desse instante como data de calendário ISO e hora de relógio normais, não como texto EXIF bruto. Esta capacidade aceita a string DateTimeOriginal, valida-a como dia gregoriano real e hora de relógio válida e devolve YYYY-MM-DD, HH:MM:SS e um datetime local ISO-8601 combinado sem inventar fuso horário.
Como o EXIF DateTimeOriginal se parece e por que o ISO importa
Toda câmera digital que embute metadados Exif pode armazenar o instante da captura em DateTimeOriginal. A especificação Exif 2.x registra esse valor em vinte caracteres com forma rígida: quatro dígitos para o ano, dois-pontos, dois dígitos para o mês, outros dois-pontos, dois dígitos para o dia, um único espaço e depois hora, minuto e segundo de dois dígitos separados por dois-pontos. Esse layout não é ISO-8601 nem um timestamp Unix.
Ordenar strings lexicograficamente só funciona porque o ano vem primeiro; juntar valores EXIF a planilhas, colunas SQL de data ou construtores Date de JavaScript falha a menos que você reescreva os dois-pontos na parte da data. Fotógrafos também se importam com o fato de DateTimeOriginal ser o horário de captura, não FileModifyDate nem o carimbo da última edição que editores de imagem reescrevem.
Converter DateTimeOriginal em data ISO (YYYY-MM-DD), hora ISO (HH:MM:SS) e string ISO local combinada (YYYY-MM-DDTHH:MM:SS) entrega campos que bancos de dados, importadores CSV e seletores de data do frontend já entendem. Esta ferramenta não abre o arquivo de imagem: você passa a string da etiqueta que já leu de uma biblioteca EXIF, um dump ou um sidecar. Isso mantém a capacidade em parse puro tier A, grátis no navegador e determinística para testes.
Quando a etiqueta está ausente, vazia ou fora do padrão esperado, a tarefa falha em vez de adivinhar. Use o campo iso quando precisar de uma coluna; use date e time quando o esquema separar o dia do calendário da hora do relógio.
Contrato de entrada, formato da resposta e regras de validação
O valor deve corresponder a YYYY:MM:DD HH:MM:SS após o trim; um único espaço ou a letra T entre data e hora é aceito para que dumps que já se aproximam do ISO ainda sejam analisados se a data continuar com dois-pontos EXIF. O ano deve estar entre 0001 e 9999. O mês deve ser 01–12.
O dia deve existir naquele mês sob a regra gregoriana de ano bissexto (fevereiro tem vinte e nove dias somente quando o ano é divisível por quatro, exceto séculos não divisíveis por quatrocentos). A hora é 00–23; minuto e segundo são 00–59. Exemplo: 2023:06:15 14:30:45 vira date 2023-06-15, time 14:30:45 e iso 2023-06-15T14:30:45.
Exemplo de dia bissexto: 2024:02:29 00:00:00 tem sucesso; 2023:02:29 12:00:00 falha.
Onde extrair a data da foto do EXIF vale a pena
Agências fotográficas e sistemas DAM normalizam datas de captura antes da importação para que buscas por dia de sessão permaneçam precisas mesmo quando arquivos foram copiados entre máquinas que reescreveram mtimes. Redações jornalísticas e fluxos de prova legal precisam de uma análise defensável do DateTimeOriginal da câmera, e não de uma data solta em texto livre. Pipelines sociais e de e-commerce que renomeiam uploads com a data do disparo chamam um pequeno passo de parse após a extração EXIF em lote para que os nomes de arquivo fiquem estáveis.
Sites de conteúdo que ranqueiam por frases como extrair data em que a foto foi tirada do EXIF se beneficiam de uma landing focada que atende a essa intenção sem o ruído de uma ferramenta de dump EXIF completo. Validação falha não consome saldo.
Casos de uso
Importação DAM e galerias
Converta EXIF DateTimeOriginal da ingestão em massa de fotos em datas ISO para ordenar álbuns, filtros e colunas de banco de dados.
Carimbo de nomes e linhas do tempo
Monte nomes de arquivo com a data de captura e linhas do tempo editoriais a partir da etiqueta da câmera, sem confiar no horário de modificação do arquivo.
Checagens de evidência e conformidade
Valide se um carimbo de disparo alegado corresponde a um DateTimeOriginal EXIF bem formado antes de arquivar ou exportar para discovery.
Perguntas frequentes
Qual é o formato do EXIF DateTimeOriginal?
As câmeras o armazenam como YYYY:MM:DD HH:MM:SS com dois-pontos na parte da data. Esta ferramenta analisa essa string e devolve data ISO, hora e um datetime local ISO combinado.
Esta ferramenta lê o arquivo de imagem?
Não. Passe a string DateTimeOriginal que você já extraiu. Assim a capacidade permanece parse puro, grátis no navegador e sem I/O binário.
O que acontece se a etiqueta estiver ausente ou malformada?
Valores vazios, separadores errados, dias de calendário impossíveis e horários fora da faixa são rejeitados.
O resultado considera fuso horário?
Não. EXIF DateTimeOriginal é um carimbo de relógio local sem zona. O campo iso é YYYY-MM-DDTHH:MM:SS sem Z nem offset para não inventar fuso horário.
Por que usar a data da foto e não a data de modificação do arquivo?
Porque a data de captura registra quando a foto foi tirada, enquanto a de modificação muda sempre que o arquivo é copiado para outro computador ou editado. Ordenar pela data de captura mantém cada sessão na ordem real.
Ferramentas relacionadas
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
curl -X POST https://api.kit.forhosting.com/image/exif-date-extract \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"datetime_original":"2023:06:15 14:30:45"}'const res = await fetch("https://api.kit.forhosting.com/image/exif-date-extract", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"datetime_original": "2023:06:15 14:30:45"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/image/exif-date-extract",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"datetime_original": "2023:06:15 14:30:45"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/image/exif-date-extract", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"datetime_original":"2023:06:15 14:30:45"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"datetime_original":"2023:06:15 14:30:45"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/image/exif-date-extract", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemplo de requisição
{
"datetime_original": "2023:06:15 14:30:45"
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "image.exif_date_extract",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Limites
max_mb | 15 |
max_megapixels | 12 |
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |
Notas técnicas
Etiquetas ausentes e valores malformados falham de forma limpa com invalid_input para que a automação nunca trate lixo como análise bem-sucedida.
Como o EXIF DateTimeOriginal se parece e por que o ISO importa
Quando o dia do calendário é impossível — trinta e um de fevereiro, hora vinte e cinco ou vinte e nove de fevereiro em ano não bissexto — o mesmo caminho invalid_input protege quem chama da corrupção silenciosa.
Contrato de entrada, formato da resposta e regras de validação
Envie um corpo JSON com o campo string obrigatório datetime_original. Os aliases date_time_original, exif_datetime e taken_at são aceitos por conveniência quando o leitor EXIF de origem usa outra chave. Em caso de sucesso, a resposta ecoa um datetime_original canônico com um único espaço como separador, mais date, time, iso e os componentes inteiros year, month, day, hour, minute e second para que os clientes formatem sem reanalisar. Campos ausentes, tipos que não são string, separadores errados como 2023-06-15 14:30:45 sem dois-pontos EXIF na data e componentes fora da faixa geram invalid_input e não são cobrados.
Onde extrair a data da foto do EXIF vale a pena
Apps móveis que já leem EXIF em processo ainda podem chamar este endpoint quando um pipeline no servidor precisa revalidar a mesma string antes de gravar em Postgres TIMESTAMPTZ ou em uma API JSON.
Perguntas técnicas
Quanto custa extrair a data da foto do EXIF?
A ferramenta no navegador é grátis. Requisições API usam o saldo pré-pago do KIT a US$ 0,002 por chamada bem-sucedida; entrada inválida não é cobrada.