Intervalo entre dois períodos de tempo em UTC
Esta calculadora mede o tempo decorrido que separa dois intervalos explícitos de data e hora ISO.
Executar grátis
Informe o início e o fim de cada intervalo com UTC ou deslocamento numérico; todos os valores são normalizados para UTC antes da comparação. Quando os períodos se sobrepõem ou compartilham um limite, o resultado é zero. Ela também retorna milissegundos, segundos, uma duração ISO 8601 e a ordem cronológica.
Informe intervalos completos com deslocamentos explícitos
Forneça quatro valores: início e fim do primeiro intervalo, seguidos do início e fim do segundo. Cada valor deve ser uma data e hora ISO 8601 completa, como <code>2026-07-25T09:00:00Z</code> ou <code>2026-07-25T12:00:00+01:00</code>. A zona explícita identifica o instante sem depender da configuração local. Cada início deve ser anterior ou igual ao respectivo fim. São aceitas frações de segundo com até três dígitos; datas sem hora, zonas nomeadas, segundos intercalares e deslocamentos omitidos são rejeitados. Se a sua fonte usar zonas nomeadas, converta-as antes para o deslocamento correto na data de cada extremidade.
Entenda como a lacuna UTC é calculada
Cada extremidade é convertida por aritmética de calendário em uma posição UTC em milissegundos. Se o primeiro intervalo terminar antes de o segundo começar, subtrai-se o primeiro fim do segundo início; se a ordem for inversa, a operação também é invertida. Nos demais casos, os períodos se tocam ou se sobrepõem e a lacuna é zero. Assim, 12:00 em +01:00 equivale a 11:00Z. A resposta inclui milissegundos, segundos, duração ISO 8601 e um rótulo de ordem. O método não usa relógio atual, localidade, rede nem o analisador de datas do ambiente.
Use o resultado com segurança em agendas
O resultado não negativo ajuda a medir tempo ocioso entre reservas, incidentes ou períodos operacionais. Consulte o rótulo de ordem para saber qual intervalo ocorreu primeiro. <code>overlap_or_touch</code> reúne intencionalmente sobreposição e contato, pois ambos deixam uma lacuna numérica igual a zero. Para medir a sobreposição, horas úteis ou distinguir contato de interseção, use um cálculo específico. O navegador executa o mesmo solucionador puro da API. As solicitações por API custam US$ 0,002. Preserve os milissegundos para comparações abaixo de um segundo e use a duração ISO para intercâmbio ou exibição.
Casos de uso
Verificar margens entre reservas
Meça o tempo livre exato entre reservas após normalizar os deslocamentos de fuso explícitos.
Analisar linhas do tempo de eventos
Calcule o silêncio entre incidentes registrados por sistemas com deslocamentos UTC diferentes.
Validar a separação de horários
Confirme que duas janelas operacionais deixam tempo suficiente, independentemente da ordem de entrada.
Perguntas frequentes
O que acontece quando os intervalos se sobrepõem?
A lacuna é zero e a ordem é overlap_or_touch, pois não há tempo decorrido separando os períodos.
E quando um intervalo termina exatamente no início do outro?
Eles se tocam, portanto a lacuna retornada é exatamente zero.
Deslocamentos de fuso diferentes são aceitos?
Sim. Cada extremidade é normalizada de Z ou do deslocamento numérico explícito para UTC antes da comparação.
Posso omitir o deslocamento de fuso?
Não. Ele é obrigatório para o cálculo não depender da zona do servidor, navegador ou dispositivo.
Qual é a precisão do resultado?
Entradas e saídas aceitam milissegundos; a lacuna também é retornada em segundos e como duração ISO 8601.
Quanto custa uma solicitação por API?
O preço-base publicado é US$ 0,002 por solicitação, e o mesmo cálculo determinístico está disponível no navegador.
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/date/intervals-gap \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"first_start":"2026-07-25T09:00:00Z","first_end":"2026-07-25T10:30:00Z","second_start":"2026-07-25T12:00:00+01:00","second_end":"2026-07-25T13:00:00+01:00"}'const res = await fetch("https://api.kit.forhosting.com/date/intervals-gap", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"first_start": "2026-07-25T09:00:00Z",
"first_end": "2026-07-25T10:30:00Z",
"second_start": "2026-07-25T12:00:00+01:00",
"second_end": "2026-07-25T13:00:00+01:00"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/date/intervals-gap",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"first_start": "2026-07-25T09:00:00Z",
"first_end": "2026-07-25T10:30:00Z",
"second_start": "2026-07-25T12:00:00+01:00",
"second_end": "2026-07-25T13:00:00+01:00"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/date/intervals-gap", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"first_start":"2026-07-25T09:00:00Z","first_end":"2026-07-25T10:30:00Z","second_start":"2026-07-25T12:00:00+01:00","second_end":"2026-07-25T13:00:00+01:00"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"first_start":"2026-07-25T09:00:00Z","first_end":"2026-07-25T10:30:00Z","second_start":"2026-07-25T12:00:00+01:00","second_end":"2026-07-25T13:00:00+01:00"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/date/intervals-gap", 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
{
"first_start": "2026-07-25T09:00:00Z",
"first_end": "2026-07-25T10:30:00Z",
"second_start": "2026-07-25T12:00:00+01:00",
"second_end": "2026-07-25T13:00:00+01:00"
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "date.intervals_gap",
"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_chars | 35 |
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. |