Dos intervalos de tiempo se solapan cuando cada uno empieza antes de que termine el otro. Esta prueba también incluye la contención total. Aquí te explicamos cómo aplicarla en Numbers en tu Mac para comparar ventanas de publicación, validar fechas y gestionar extremos contiguos.
Este flujo de trabajo está pensado para quien planifica ventanas de publicación en una hoja de cálculo. Todas las fechas y etiquetas que aparecen a continuación son sintéticas. Compararás dos ventanas por fila y obtendrás un resultado claro sin escribir un programa.
¿Qué cuenta como solapamiento?
Primero, decide si un intervalo incluye el instante en que termina. En este artículo se usa un intervalo que incluye el inicio y excluye el final, escrito [start, end). Una ventana desde 09:00 hasta 12:00 incluye su inicio y termina al mediodía. Por lo tanto, otra ventana que empieza a las 12:00 no se solapa con ella. Esto coincide con la convención de eventos de iCalendar: DTSTART es inclusivo y DTEND no es inclusivo. RFC 5545, sección 3.6.1.
Para dos intervalos válidos de duración positiva, la prueba completa de solapamiento es:
A.start < B.end AND B.start < A.end
El razonamiento es sencillo. Dos ventanas están separadas si A termina antes o justo cuando empieza B, o si B termina antes o justo cuando empieza A. Si no se cumple ninguna de esas condiciones de separación, comparten tiempo. Esta deducción también explica por qué la contención no requiere una condición de solapamiento adicional.
Supongamos que A va de 09:00 a 12:00. Si B va de 08:00 a 13:00, ninguno de los extremos de B cae dentro de A; sin embargo, B contiene toda A. Una prueba que solo pregunte si B empieza o termina dentro de A no detectaría este caso. La regla de las dos comparaciones sí lo detecta.
Guarda este conjunto de pruebas sintético junto a tu hoja de cálculo. Todas las horas que aparecen a continuación corresponden al 10 de noviembre de 2026 y usan la misma base horaria.
| Ventana A | Ventana B | Resultado esperado | Motivo |
|---|---|---|---|
09:00–12:00 |
11:00–13:00 |
Se solapan | Intersección parcial |
09:00–12:00 |
10:00–11:00 |
Se solapan | A contiene B |
09:00–12:00 |
08:00–13:00 |
Se solapan | B contiene A |
09:00–12:00 |
09:00–12:00 |
Se solapan | Ventanas idénticas |
09:00–12:00 |
12:00–13:00 |
No se solapan | Solo coinciden los extremos |
09:00–12:00 |
13:00–14:00 |
No se solapan | Hay un intervalo entre las ventanas |
Configurar fechas y horas comparables en Numbers
Usa fechas y horas completas para las ventanas de publicación con hora. Una hora por sí sola no permite distinguir esta mañana de mañana por la mañana. Numbers también completa los componentes que faltan: si introduces solo una hora, añade la fecha de hoy. Ocultar una fecha o una hora cambia cómo se muestra, pero el componente almacenado sigue participando en los cálculos. Dar formato a fechas, monedas y otros datos en Numbers en Mac.
Crea una tabla con estas columnas y usa la fila 1 para los encabezados:
| Columna | Encabezado | Finalidad |
|---|---|---|
| A | Par | Etiqueta neutral para la comparación |
| B | Inicio de A | Comienzo de la primera ventana |
| C | Fin de A | Final exclusivo de la primera ventana |
| D | Inicio de B | Comienzo de la segunda ventana |
| E | Fin de B | Final exclusivo de la segunda ventana |
| F | Comprobación de datos | Indica si se puede hacer la comparación |
| G | Resultado del solapamiento | La respuesta |
Selecciona las celdas de entrada de las columnas B a E. En la barra lateral Formato, elige Celda y luego define Formato de datos como Fecha y hora. Elige formatos que muestren tanto la fecha como la hora. La Vista de celda inteligente, en la parte inferior de la ventana, permite inspeccionar ambos componentes del valor seleccionado. Instrucciones de Apple para dar formato a fechas y horas.
Para reproducir el primer ejemplo, escribe Par de muestra en A2 e introduce las siguientes fórmulas en las celdas indicadas. Estas fórmulas crean A como 09:00–12:00 y B como 10:00–11:00 el 10 de noviembre de 2026. Considera que todos los extremos de este ejemplo están en UTC; anota esa convención junto a la tabla.
| Celda | Fórmula |
|---|---|
| B2 | =DATE(2026,11,10)+DURATION(0,0,9) |
| C2 | =DATE(2026,11,10)+DURATION(0,0,12) |
| D2 | =DATE(2026,11,10)+DURATION(0,0,10) |
| E2 | =DATE(2026,11,10)+DURATION(0,0,11) |
DATE construye una fecha a partir del año, el mes y el día, y evita cadenas de fecha ambiguas. DURATION acepta semanas, días y horas como sus tres primeros argumentos, así que DURATION(0,0,9) representa nueve horas. Son fórmulas de hoja de cálculo, no comandos de Terminal. DATE, DURATION.
Para introducir una fórmula, selecciona la celda de destino, escribe =, introduce la expresión y pulsa Retorno. Numbers admite comparaciones entre valores de celdas y muestra sus resultados booleanos. Si tu configuración usa una coma como separador decimal, usa punto y coma en lugar de comas entre los argumentos de las funciones. Calcular valores usando datos de las celdas de una tabla en Numbers en Mac, Descripción general de las funciones.
Validar las ventanas antes de comprobar el solapamiento
Para esta tarea, exige cuatro valores de fecha y hora reconocidos y que el final sea estrictamente posterior al inicio correspondiente. Un intervalo invertido debe corregirse. Una ventana de publicación de duración cero también requiere una decisión aparte, porque según la convención elegida no representa ningún tiempo ocupado.
Introduce esta fórmula en F2:
=IF(AND(ISDATE(B2),ISDATE(C2),ISDATE(D2),ISDATE(E2)),IF(AND(B2<C2,D2<E2),\"Ready\",\"Invalid window\"),\"Check dates\")
La prueba exterior comprueba si todos los extremos son valores de fecha. La prueba interior comprueba el orden de ambas ventanas. ISDATE identifica los valores de fecha, AND exige que todas sus condiciones sean verdaderas y IF selecciona el resultado correspondiente. ISDATE, AND, IF.
El ejemplo debería devolver Ready. Si devuelve Check dates, revisa las celdas de entrada en lugar de tratar la fila como si fueran ventanas separadas. Si devuelve Invalid window, comprueba si los extremos son iguales, si las entradas están invertidas o si falta la fecha del día siguiente. Deja visible cualquier error de fórmula hasta corregir su causa.
Detectar solapamientos, incluida la contención total
Introduce esta fórmula en G2:
=IF(F2=\"Ready\",IF(AND(B2<E2,D2<C2),\"Overlap\",\"No overlap\"),\"Check inputs\")
Para una fila válida, las dos comparaciones aplican directamente la regla de solapamiento: B2 es el inicio de A, E2 es el final de B, D2 es el inicio de B y C2 es el final de A. AND solo devuelve verdadero cuando se cumplen ambas comparaciones. Documentación de AND de Apple.
El ejemplo devuelve Overlap, porque B queda completamente dentro de A. Cambia la hora de D2 a 8 y la de E2 a 13; debería seguir devolviendo Overlap, ahora porque B contiene A. Cámbialas a 12 y 13; el resultado debería ser No overlap.
Usa la tabla de pruebas anterior para comprobar los demás casos. Para hacer comparaciones adicionales, introduce otro par en la fila siguiente y copia las fórmulas de F y G en esa fila. Inspecciona las fórmulas copiadas para confirmar que sus referencias apuntan a la nueva fila.
Esta disposición compara las dos ventanas indicadas en cada fila. No compara automáticamente todas las ventanas de una lista de eventos independiente entre sí. Para una lista pequeña, crea una fila por cada par distinto que quieras examinar y evita repetir los pares en orden inverso.
Identificar qué ventana contiene a la otra
El solapamiento y la contención responden a preguntas distintas. Si también necesitas saber si A contiene por completo a B, añade una columna H llamada A contiene B e introduce:
=IF(F2=\"Ready\",AND(B2<=D2,E2<=C2),\"Check inputs\")
Para B contiene A, añade una columna I e introduce:
=IF(F2=\"Ready\",AND(D2<=B2,C2<=E2),\"Check inputs\")
Estas pruebas de contención permiten que los extremos coincidan. Por lo tanto, las ventanas idénticas devuelven TRUE en ambas columnas. Si la tarea requiere que la ventana contenida tenga espacio en ambos extremos, sustituye las dos comparaciones no estrictas de la fórmula de contención correspondiente por comparaciones estrictas. Esa es una condición editorial adicional; no cambia el resultado del solapamiento.
Mantener separadas las fechas civiles, los instantes, los desfases y las zonas
Decide qué significan tus datos antes de aplicar las fórmulas. Una fecha civil como 2026-11-10 designa un día del calendario sin especificar una zona horaria. Es adecuada para una etiqueta de publicación que cubre todo el día. La API Temporal.PlainDate de TC39 modela explícitamente este tipo de fecha con independencia de una zona. Temporal.PlainDate.
Un instante identifica un punto de la línea temporal. Un desfase como +01:00 describe la diferencia con respecto a UTC en ese momento. Una zona con nombre, como Europe/Paris, proporciona las reglas horarias de la región. Son datos distintos: un desfase fijo no contiene las reglas cambiantes de una zona con nombre. Temporal.ZonedDateTime.
Por ejemplo, las marcas de tiempo sintéticas 2026-11-10T10:00:00+01:00 y 2026-11-10T09:00:00Z identifican el mismo instante. Comparar solo las horas mostradas daría un orden incorrecto.
Las fórmulas de la hoja de cálculo anteriores comparan los valores que introduces; no incluyen un paso de conversión de zona con nombre. Para ventanas con hora que provienen de distintas zonas, primero convierte cada extremo en un instante y expresa todos los extremos en UTC. Conserva por separado la información de la zona original si necesitas reconstruir el horario local previsto.
Para una conversión automatizada, la ruta documentada de la API consiste en crear un Temporal.ZonedDateTime con su zona y convertirlo mediante toInstant(). Su método compare() ordena los tiempos exactos. Si una hora local se omite o se repite durante una transición de desfase, la API ofrece opciones explícitas para resolver la ambigüedad, incluida reject. Resuelve esa ambigüedad antes de importar valores comparables. Conversión, comparación y resolución de ambigüedades de Temporal.ZonedDateTime.
Para ventanas que abarcan todo el día, trabaja con fechas civiles. Un periodo de publicación sintético que cubre del 10 al 12 de noviembre, ambos días inclusive, puede representarse como [2026-11-10, 2026-11-13). iCalendar también usa el día posterior al último día incluido como final exclusivo de un evento de todo el día. En Numbers, introduce estos límites con fórmulas DATE para que sus componentes de hora sean coherentes. Ejemplo de evento de varios días de RFC 5545.
Resolver los casos límite sin cambiar la pregunta
Un intervalo que cruza la medianoche necesita la fecha siguiente para su valor final. Una ventana que empieza el 10 de noviembre a las 23:00 y termina el 11 de noviembre a las 01:00 es válida. Si introduces ambos extremos con fecha del 10 de noviembre, el intervalo queda invertido. Corrige la fecha en vez de intercambiar los valores automáticamente, porque hacerlo podría ocultar un error de entrada.
Si los extremos contiguos deben contar como solapamiento para tu tarea concreta, usa AND(B2<=E2,D2<=C2) en la fórmula de G2. Mantén la comprobación de duración positiva, salvo que hayas definido por separado cómo deben tratarse los eventos puntuales. Este cambio modifica la política de límites y debería anotarse junto a la tabla.
Esa política también importa cuando se usan las API nativas de Mac. Apple documenta DateInterval de Foundation como un intervalo cerrado que incluye ambos extremos y permite una duración cero. Proporciona intersects y intersection(with:), pero su modelo de intervalo cerrado difiere de la convención de iCalendar usada aquí. Para el solapamiento de calendarios con duración positiva, aplica la prueba explícita de extremos estrictos en lugar de suponer que la política de intersección de una API coincide con la de tu tarea. DateInterval.
Antes de confiar en una comparación, comprueba tres cosas: que cada extremo tenga la fecha y la base horaria previstas, que ambas ventanas tengan una duración positiva y que el ejemplo de extremos contiguos produzca el resultado elegido. Una vez explícitas esas decisiones, las mismas dos comparaciones gestionan el solapamiento parcial, la contención total y las ventanas idénticas.
Fuentes
- Calcular valores usando datos de las celdas de una tabla en Numbers en Mac — Apple.
- Dar formato a fechas, monedas y otros datos en Numbers en Mac — Apple.
- Descripción general de las funciones — Apple.
- DATE — Apple.
- DURATION — Apple.
- ISDATE — Apple.
- AND — Apple.
- IF — Apple.
- DateInterval — Documentación para desarrolladores de Apple.
- Temporal.PlainDate — Ecma TC39.
- Temporal.ZonedDateTime — Ecma TC39.
- RFC 5545: Especificación básica de objetos para la programación y planificación en Internet (iCalendar) — RFC Editor.