Compruebe conflictos horarios y actividades solapadas
El comprobador de conflictos horarios revisa una lista de actividades previstas e identifica cada par que ocupa el mismo intervalo.
Ejecutar — gratis
Añada cada actividad con nombre y horas de inicio y fin en formato HH:MM de 24 horas. El resultado indica si existen conflictos, cuántos hay, qué actividades coinciden y cuál es el intervalo compartido. También rechaza toda actividad que termine antes de empezar, evitando resultados engañosos.
Introduzca un itinerario claro para un solo día
Asigne a cada actividad un nombre útil e indique el inicio y el fin en formato HH:MM de 24 horas. Todas las entradas se consideran del mismo día, por lo que la herramienta resulta apropiada para visitas, congresos, excursiones o jornadas de viaje. Utilice nombres que pueda reconocer en el resultado; «Visita guiada al museo» es más informativo que «Visita». No hace falta ordenar las filas por hora. El comprobador compara todos los pares y conserva el índice original, empezando por 0, para que otro sistema pueda localizar el registro exacto. El inicio y el fin pueden coincidir: esa actividad no tiene duración y no genera solapamiento. Una actividad nocturna que empieza a las 23:00 y termina a la 01:00 queda fuera de este modelo, pues el fin parecería anterior al inicio. Separe esos planes por fecha antes de comprobarlos.
Entienda qué se considera un conflicto
Dos actividades entran en conflicto únicamente cuando comparten un tiempo positivo. Si una visita termina a las 11:00 y el almuerzo empieza a las 11:00, solo se tocan en el límite y no hay solapamiento. Si el almuerzo empieza a las 10:59, existe un conflicto de un minuto. Cada resultado identifica los nombres y los índices de ambas actividades, el inicio y el fin del intervalo común y su duración en minutos. El informe incluye todos los pares: si tres actividades coinciden, aparecen las tres combinaciones, en vez de un bloque impreciso. Así, una persona o una aplicación puede revisar cada relación por separado. Los pares se devuelven en el orden determinista de la entrada, no por gravedad. Si una actividad queda contenida por completo en otra, su duración entera es el intervalo solapado. Los horarios idénticos también coinciden durante toda su duración.
Corrija intervalos no válidos y aproveche el resultado
Antes de comparar, se valida cada hora. El valor debe contener dos dígitos para la hora, dos puntos y dos dígitos para los minutos, dentro de 00:00 y 23:59. Si un fin es anterior al inicio, la solicitud termina con un error de entrada. No se interpreta como una actividad nocturna ni se corrige automáticamente, porque eso podría ocultar un fallo de reserva. Con datos válidos, consulte `has_conflicts` para tomar una decisión sencilla, `conflict_count` para resumir el itinerario y `conflicts` para mostrar detalles junto a los registros originales. Un planificador puede pedir que se elija entre cada par, mientras que una hoja de cálculo puede marcar los índices afectados. Tras modificar el plan, envíe de nuevo la lista completa. Cero conflictos confirma que no quedan solapamientos de duración positiva. El cálculo es determinista, no consulta la red ni el reloj y cuesta $0.002 por solicitud de API; en el navegador es gratuito.
Qué puede hacer con ella
Revise una jornada turística
Compruebe entradas a museos, visitas, comidas y traslados antes de confirmar un día intenso.
Valide un programa de congreso
Encuentre sesiones, reuniones y actos que compiten por el tiempo del mismo asistente.
Añada controles a un planificador
Use índices estables y pares completos para señalar registros que deben reprogramarse.
Preguntas frecuentes
¿Qué formato horario debo utilizar?
Utilice valores HH:MM de 24 horas entre 00:00 y 23:59, como 09:30 o 18:05.
¿Entran en conflicto las actividades consecutivas?
No. Si una termina exactamente cuando empieza otra, los intervalos solo se tocan y no se informa de conflicto.
¿Qué ocurre si el fin es anterior al inicio?
La solicitud falla con un error de entrada que identifica la posición. No se supone que la actividad continúe durante la noche.
¿Puede indicar más de un conflicto?
Sí. Devuelve cada par solapado, incluidas todas las combinaciones cuando coinciden tres o más actividades.
¿Puedo comprobar actividades de fechas distintas?
No directamente. Se comparan horas de un mismo día. Agrupe las actividades por fecha y compruebe cada día por separado.
¿Cuánto cuesta una solicitud de API?
Una solicitud de API usa el precio base publicado de $0.002. La versión del navegador ejecuta gratis la misma comprobación determinista.
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/travel2/itinerary-time-conflict-check \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"activities":[{"name":"Museum visit","start":"09:00","end":"11:00"},{"name":"Walking tour","start":"10:30","end":"12:00"}]}'const res = await fetch("https://api.kit.forhosting.com/travel2/itinerary-time-conflict-check", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"activities": [
{
"name": "Museum visit",
"start": "09:00",
"end": "11:00"
},
{
"name": "Walking tour",
"start": "10:30",
"end": "12:00"
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/travel2/itinerary-time-conflict-check",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"activities": [
{
"name": "Museum visit",
"start": "09:00",
"end": "11:00"
},
{
"name": "Walking tour",
"start": "10:30",
"end": "12:00"
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/travel2/itinerary-time-conflict-check", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"activities":[{"name":"Museum visit","start":"09:00","end":"11:00"},{"name":"Walking tour","start":"10:30","end":"12:00"}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"activities":[{"name":"Museum visit","start":"09:00","end":"11:00"},{"name":"Walking tour","start":"10:30","end":"12:00"}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/travel2/itinerary-time-conflict-check", 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
{
"activities": [
{
"name": "Museum visit",
"start": "09:00",
"end": "11:00"
},
{
"name": "Walking tour",
"start": "10:30",
"end": "12:00"
}
]
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "travel2.itinerary_time_conflict_check",
"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. |