Diferencia entre dos intervalos de tiempo en UTC
Esta calculadora mide el tiempo transcurrido que separa dos intervalos de fecha y hora ISO explícitos.
Ejecutar — gratis
Indique el inicio y el final de cada intervalo con UTC o un desfase numérico; antes de compararlos, todos los valores se normalizan a UTC. Si los rangos se solapan o comparten un límite, devuelve cero. También ofrece milisegundos, segundos, una duración ISO 8601 y el orden cronológico.
Introduzca intervalos completos con desfases explícitos
Proporcione cuatro valores: inicio y final del primer intervalo e inicio y final del segundo. Cada valor debe ser una fecha y hora ISO 8601 completa, como <code>2026-07-25T09:00:00Z</code> o <code>2026-07-25T12:00:00+01:00</code>. La zona explícita identifica el instante sin depender de la configuración local. Cada inicio debe ser anterior o igual a su final. Se admiten fracciones de segundo de hasta tres cifras; se rechazan fechas sin hora, zonas con nombre, segundos intercalares y desfases omitidos. Si su origen usa zonas con nombre, conviértalas antes al desfase correcto para la fecha de cada extremo.
Cómo se calcula la diferencia UTC
Cada extremo se convierte mediante aritmética de calendario en una posición UTC en milisegundos. Si el primer intervalo termina antes de que empiece el segundo, se resta el primer final del segundo inicio; si ocurre al revés, se invierte la operación. En cualquier otro caso se tocan o solapan y la diferencia es cero. Por ello, 12:00 con +01:00 equivale a 11:00Z. La respuesta incluye milisegundos, segundos, duración ISO 8601 y una etiqueta de orden. No utiliza reloj actual, configuración regional, red ni el analizador de fechas del entorno.
Use el resultado de forma segura en planificaciones
El resultado no negativo sirve para medir tiempo inactivo entre reservas, incidentes o periodos operativos. Consulte la etiqueta de orden si necesita saber qué intervalo ocurrió primero. <code>overlap_or_touch</code> agrupa intencionadamente solapamiento y contacto, pues ambos dejan una diferencia numérica de cero. Para calcular la longitud del solapamiento, horas laborables o distinguir contacto de intersección, utilice un cálculo específico. El navegador ejecuta el mismo solucionador puro que la API. Las solicitudes por API cuestan $0.002. Conserve los milisegundos para comparaciones subsegundo y use la duración ISO para intercambio o presentación.
Qué puede hacer con ella
Verificar márgenes entre reservas
Mida el tiempo libre exacto entre reservas tras normalizar sus desfases horarios explícitos.
Analizar cronologías de eventos
Calcule el silencio entre incidentes registrados por sistemas con distintos desfases UTC.
Validar la separación de horarios
Confirme que dos ventanas operativas dejan tiempo suficiente, sin importar el orden de entrada.
Preguntas frecuentes
¿Qué ocurre si los intervalos se solapan?
La diferencia es cero y el orden es overlap_or_touch, porque no existe tiempo transcurrido entre los rangos.
¿Qué ocurre si un intervalo termina cuando empieza el otro?
Los intervalos se tocan, por lo que la diferencia devuelta es exactamente cero.
¿Se admiten distintos desfases horarios?
Sí. Cada extremo se normaliza desde Z o su desfase numérico explícito a UTC antes de compararlo.
¿Puedo omitir el desfase horario?
No. Es obligatorio para que el cálculo no dependa de la zona del servidor, navegador o dispositivo.
¿Qué precisión tiene el resultado?
La entrada y la salida admiten milisegundos; la diferencia también se devuelve en segundos y como duración ISO 8601.
¿Cuánto cuesta una solicitud por API?
El precio base publicado es $0.002 por solicitud; el mismo cálculo determinista está disponible en el navegador.
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su stack
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)Ejemplo de solicitud
{
"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"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "date.intervals_gap",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Límites
max_chars | 35 |
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |