Diferencia entre dos intervalos de tiempo en UTC
Escriba dos intervalos de tiempo y obtenga lo que los separa: uno que termina a las 10:30 UTC y otro que empieza a las 12:00 con desfase +01:00 están a 30 minutos, es decir, 1800 segundos. Los desfases se pasan antes a UTC. Gratis en su navegador.
- Gratis
- Funciona en su navegador
- Sin registro
- Sus datos no salen de su equipo
Ejecutar — gratis
Ejemplo resuelto
- Inicio del primero
- 2026-07-25T09:00:00Z
- Fin del primero
- 2026-07-25T10:30:00Z
- Inicio del segundo
- 2026-07-25T12:00:00+01:00
- Fin del segundo
- 2026-07-25T13:00:00+01:00
- Intervalo (milisegundos)
- 1 800 000
- Segundos de intervalo
- 1 800
- Duración
- PT30M
- Orden
- first_before_second
Esta calculadora mide el tiempo transcurrido que separa dos intervalos de fecha y hora ISO explícitos. 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. Para calcular la longitud del solapamiento, horas laborables o distinguir contacto de intersección, utilice un cálculo específico. 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 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.
¿Importa qué intervalo escribo primero?
No. El primer intervalo no tiene por qué ser el más temprano. La calculadora revisa los dos órdenes, mide desde el final del intervalo anterior hasta el inicio del posterior e indica cuál va primero.
Herramientas relacionadas
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. |
Notas técnicas
Use el resultado de forma segura en planificaciones
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. El navegador ejecuta el mismo solucionador puro que la API. Las solicitudes por API cuestan $0.002.
Preguntas técnicas
¿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.
¿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.