Intersección de intervalos
Escriba dos intervalos de tiempo y obtenga la parte que comparten: de 10:00 a 12:00 y de 11:00 a 13:00 UTC se solapan de 11:00 a 12:00, una hora exacta. Si solo se tocan, el resultado queda vacío. Gratis en su navegador.
- Gratis
- Funciona en su navegador
- Sin registro
- Sus datos no salen de su equipo
Ejecutar — gratis
Ejemplo resuelto
- Inicio del intervalo A
- 2020-01-01T10:00:00.000Z
- Fin del intervalo A
- 2020-01-01T12:00:00.000Z
- Inicio del intervalo B
- 2020-01-01T11:00:00.000Z
- Fin del intervalo B
- 2020-01-01T13:00:00.000Z
- Inicio de la intersección
- 2020-01-01T11:00:00.000Z
- Fin de la intersección
- 2020-01-01T12:00:00.000Z
- Duración de la intersección (milisegundos)
- 3 600 000
- Duración de la intersección (horas)
- 1
Calcula el solape de dos intervalos ISO con orden estricto, duración en milisegundos y horas. Gratis, determinista y privado en el navegador.
Qué significa que dos intervalos se solapen
Dos intervalos de tiempo se solapan cuando hay un tramo que pertenece a los dos. Piense en dos reservas de una sala o en dos ventanas de incidencias de un panel de soporte: la pregunta no es cuánto dura cada uno, sino qué parte comparten. La regla es breve. El tramo común empieza en el más tardío de los dos inicios y termina en el más temprano de los dos finales. Si ese inicio queda estrictamente antes de ese final, hay solapamiento y usted obtiene el tramo con su duración en milisegundos y en horas. Para 10:00 a 12:00 y 11:00 a 13:00 UTC, el solapamiento va de 11:00 a 12:00, una hora exacta.
Los casos límite que confunden
Dos intervalos que solo se tocan, como uno que termina a las 12:00 y otro que empieza a las 12:00, no comparten tiempo, porque el final se trata como excluido; el resultado queda vacío y ambas duraciones valen cero. La herramienta nunca devuelve la unión de los dos intervalos, solo su parte común. Cada valor es una marca de tiempo completa en formato ISO 8601 y el resultado se expresa en UTC. Un intervalo cuyo final es anterior a su inicio, o un valor que falta o no es válido, se rechaza en lugar de tratarse como un solapamiento vacío.
Entradas, salidas y casos límite
Los cuatro campos son cadenas obligatorias para que la sonda del esquema pueda construir una muestra completa a partir de los ejemplos publicados. Los intervalos adyacentes que solo se tocan en un punto producen un resultado vacío porque la comparación es estrictamente menor, lo que coincide con sistemas de agenda que tratan el fin como exclusivo. Las ventanas solapadas devuelven solo el tramo compartido, nunca la unión.
Los tipos incorrectos, los campos ausentes y los rangos invertidos fallan pronto para que los clientes no vean solapes nulos silenciosos. Los ejemplos dorados cubren un solape de una hora, un par disjunto vacío, un rango A invertido y una carga completamente ausente para que los enlaces de interfaz sean honestos.
Qué puede hacer con ella
Solape de reuniones
Encuentra la ventana compartida entre dos reservas con duraciones estables.
Paneles de soporte
Resalta cuándo coinciden dos ventanas de incidente sin hoja de cálculo.
Automatización
Llama a la misma función pura desde scripts que fusionan calendarios.
Preguntas frecuentes
¿Es gratis?
Sí. Tier A corre por completo en el navegador sin cuenta.
¿Llama a la red?
No. El motor parse mantiene todo en el dispositivo.
¿Los resultados son estables?
Sí. Matemáticas deterministas y ejemplos dorados fijan el contrato.
¿Cómo se calcula el solapamiento de dos intervalos?
La parte común empieza en el mayor de los dos inicios y termina en el menor de los dos finales. Si ese inicio queda antes de ese final, los intervalos comparten tiempo; si no, el resultado está vacío y la duración es cero.
¿Qué ocurre si un intervalo termina justo cuando empieza el otro?
El resultado queda vacío. El final de cada intervalo se trata como excluido, igual que en la mayoría de los sistemas de reservas, así que dos intervalos que solo se tocan en un instante no comparten tiempo.
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/interval-intersection \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"a_start":"2020-01-01T10:00:00.000Z","a_end":"2020-01-01T12:00:00.000Z","b_start":"2020-01-01T11:00:00.000Z","b_end":"2020-01-01T13:00:00.000Z"}'const res = await fetch("https://api.kit.forhosting.com/date/interval-intersection", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"a_start": "2020-01-01T10:00:00.000Z",
"a_end": "2020-01-01T12:00:00.000Z",
"b_start": "2020-01-01T11:00:00.000Z",
"b_end": "2020-01-01T13:00:00.000Z"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/date/interval-intersection",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"a_start": "2020-01-01T10:00:00.000Z",
"a_end": "2020-01-01T12:00:00.000Z",
"b_start": "2020-01-01T11:00:00.000Z",
"b_end": "2020-01-01T13:00:00.000Z"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/date/interval-intersection", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"a_start":"2020-01-01T10:00:00.000Z","a_end":"2020-01-01T12:00:00.000Z","b_start":"2020-01-01T11:00:00.000Z","b_end":"2020-01-01T13:00:00.000Z"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"a_start":"2020-01-01T10:00:00.000Z","a_end":"2020-01-01T12:00:00.000Z","b_start":"2020-01-01T11:00:00.000Z","b_end":"2020-01-01T13:00:00.000Z"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/date/interval-intersection", 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
{
"a_start": "2020-01-01T10:00:00.000Z",
"a_end": "2020-01-01T12:00:00.000Z",
"b_start": "2020-01-01T11:00:00.000Z",
"b_end": "2020-01-01T13:00:00.000Z"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "date.interval_intersection",
"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.
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
Cómo funciona la intersección de intervalos
El inicio de la intersección es el máximo de los dos inicios y el fin es el mínimo de los dos fines. Dos intervalos civiles A y B se definen con cuatro marcas de tiempo ISO-8601: a_start, a_end, b_start y b_end. El motor analiza cada extremo con el parser Date del entorno, rechaza valores que no son cadena o no se pueden analizar con mensajes invalid_input claros que nombran el campo, y exige que a_start sea estrictamente menor que a_end y b_start estrictamente menor que b_end. Cuando el inicio es estrictamente menor que el fin el resultado no está vacío y lleva start y end como cadenas ISO UTC más duration_ms y duration_hours redondeadas a un decimal estable; en caso contrario empty es verdadero, start y end son null y ambos campos de duración valen cero.
Determinismo, límites e integración
La implementación es lógica pura de motor parse sin red, reloj ni azar más allá de las marcas de tiempo que usted aporta, así que entradas idénticas producen siempre salidas idénticas. Las marcas de tiempo extremadamente lejanas siguen sujetas a la precisión de milisegundos IEEE del tipo Date de la plataforma; documente ese contrato al almacenar resultados. Revise el esquema publicado antes de enlazar métricas y enlace solo las claves de éxito documentadas empty, start, end, duration_ms y duration_hours.
Preguntas técnicas
¿Y si el input es inválido?
Recibe invalid_input con un mensaje claro en inglés.
¿Quién es el autor?
Aspire en el taller KIT de ForHosting.