Två tidsintervall överlappar när vart och ett börjar före det andra slutar. Det testet omfattar även fullständig inneslutning. Så här använder du det i Numbers på din Mac för att jämföra publiceringsfönster, validera datum och hantera ändpunkter som tangerar varandra.

Det här arbetsflödet är avsett för dig som planerar publiceringsfönster i ett kalkylblad. Alla datum och etiketter nedan är syntetiska. Du jämför två fönster per rad och får ett tydligt resultat utan att skriva ett program.

Vad räknas som en överlappning?

Bestäm först om ett intervall inkluderar sitt sluttillfälle. Den här artikeln använder ett intervall som inkluderar starten men exkluderar slutet, skrivet [start, end). Ett fönster från 09:00 till 12:00 inkluderar starten och slutar vid middagstid. Ett annat fönster som börjar vid 12:00 överlappar därför inte det. Detta överensstämmer med händelsekonventionen i iCalendar: DTSTART är inkluderande och DTEND är exkluderande. RFC 5545, avsnitt 3.6.1.

För två giltiga intervall med positiv längd är det fullständiga överlappningstestet:

A.start < B.end AND B.start < A.end

Resonemanget är enkelt. Två fönster är åtskilda om A slutar före eller precis när B börjar, eller om B slutar före eller precis när A börjar. Om inget av separationsvillkoren gäller delar de tid. Den här härledningen förklarar också varför inneslutning inte kräver något extra överlappningsvillkor.

Tänk dig att A sträcker sig från 09:00 till 12:00. Om B sträcker sig från 08:00 till 13:00 ligger ingen av B:s ändpunkter inne i A, men B innehåller hela A. Ett test som bara frågar om B börjar eller slutar inne i A skulle missa detta fall. Regeln med två jämförelser fångar det.

Ha den här syntetiska testuppsättningen bredvid kalkylbladet. Alla tider nedan infaller den 10 november 2026 och använder samma tidsbas.

Fönster A Fönster B Förväntat resultat Orsak
09:00–12:00 11:00–13:00 Överlappning Partiellt överlapp
09:00–12:00 10:00–11:00 Överlappning A innehåller B
09:00–12:00 08:00–13:00 Överlappning B innehåller A
09:00–12:00 09:00–12:00 Överlappning Identiska fönster
09:00–12:00 12:00–13:00 Ingen överlappning Endast ändpunkterna tangerar varandra
09:00–12:00 13:00–14:00 Ingen överlappning Mellanrum mellan fönstren

Ställ in jämförbara datum och tider i Numbers

Använd fullständiga datum och tider för tidsbestämda publiceringsfönster. Enbart ett klockslag kan inte skilja mellan i morse och i morgon bitti. Numbers fyller också i saknade komponenter: om du bara anger en tid läggs dagens datum till. Om du döljer ett datum eller klockslag ändras visningen, men den lagrade komponenten används fortfarande i beräkningar. Formatera datum, valuta med mera i Numbers på Mac.

Skapa en tabell med följande kolumner och använd rad 1 för rubrikerna:

Kolumn Rubrik Syfte
A Par En neutral etikett för jämförelsen
B A start Det första fönstrets början
C A slut Det första fönstrets exklusiva sluttid
D B start Det andra fönstrets början
E B slut Det andra fönstrets exklusiva sluttid
F Indatakontroll Om jämförelse är möjlig
G Överlappningsresultat Svaret

Markera indatacellerna i kolumnerna B till E. Välj Cell i sidofältet Format och ställ sedan in Data Format på Date & Time. Välj visningsformat som visar både datum och tid. Med Smart Cell View längst ned i fönstret kan du granska båda komponenterna för ett markerat värde. Apples instruktioner för datum- och tidsformat.

För ett reproducerbart första exempel skriver du Exempelpar i A2 och anger följande formler i de angivna cellerna. De skapar A som 09:00–12:00 och B som 10:00–11:00 den 10 november 2026. Behandla alla ändpunkter i det här exemplet som UTC och anteckna den konventionen bredvid tabellen.

Cell Formel
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 bygger ett datum av år, månad och dag, vilket undviker tvetydiga datumsträngar. DURATION tar veckor, dagar och timmar som sina tre första argument, så DURATION(0,0,9) anger nio timmar. Det här är kalkylbladsformler, inte Terminal-kommandon. DATE, DURATION.

Om du vill ange en formel markerar du målcellen, skriver =, anger uttrycket och trycker på Retur. Numbers stöder jämförelser mellan cellvärden och visar deras booleska resultat. Om dina inställningar använder komma som decimaltecken ska du använda semikolon mellan funktionsargumenten i stället för kommatecken. Beräkna värden med data i tabellceller i Numbers på Mac, Översikt över funktioner.

Validera fönstren innan du testar överlappning

Kräv för den här uppgiften fyra igenkända datum- och tidsvärden samt att varje slut ligger strikt efter motsvarande start. Ett omvänt intervall behöver korrigeras. Ett publiceringsfönster med längden noll kräver också ett separat beslut, eftersom det enligt den valda konventionen inte omfattar någon tid.

Ange den här formeln i F2:

=IF(AND(ISDATE(B2),ISDATE(C2),ISDATE(D2),ISDATE(E2)),IF(AND(B2<C2,D2<E2),\"Ready\",\"Invalid window\"),\"Check dates\")

Det yttre testet kontrollerar om varje ändpunkt är ett datumvärde. Det inre testet kontrollerar ordningen för båda fönstren. ISDATE identifierar datumvärden, AND kräver att alla dess villkor är sanna och IF väljer motsvarande resultat. ISDATE, AND, IF.

Exemplet ska ge Ready. Om resultatet är Check dates granskar du indatacellerna i stället för att behandla raden som separata fönster. Om resultatet är Invalid window kontrollerar du om ändpunkterna är lika, om värdena angetts i omvänd ordning eller om datumet för nästa dag saknas. Låt eventuella formelfel visas tills du har åtgärdat orsaken.

Upptäck överlappning, inklusive fullständig inneslutning

Ange den här formeln i G2:

=IF(F2=\"Ready\",IF(AND(B2<E2,D2<C2),\"Overlap\",\"No overlap\"),\"Check inputs\")

För en giltig rad genomför de två jämförelserna överlappningsregeln direkt: B2 är A:s start, E2 är B:s slut, D2 är B:s start och C2 är A:s slut. AND returnerar sant endast när båda jämförelserna lyckas. Apples dokumentation om AND.

Exemplet ger Overlap, eftersom B ligger helt inuti A. Ändra timmen i D2 till 8 och timmen i E2 till 13; resultatet ska fortfarande vara Overlap, nu eftersom B innehåller A. Ändra dem till 12 och 13; resultatet ska bli No overlap.

Använd den tidigare testtabellen för att kontrollera de återstående fallen. För fler jämförelser anger du ett nytt par på nästa rad och kopierar formlerna i F och G till den raden. Granska de kopierade formlerna för att säkerställa att referenserna pekar på den nya raden.

Den här layouten jämför de två fönster som anges på varje rad. Den jämför inte automatiskt varje fönster i en separat händelselista med alla andra händelser. För en kort lista skapar du en rad för varje unikt par som du behöver granska och undviker att ta med samma par i omvänd ordning.

Identifiera vilket fönster som innehåller det andra

Överlappning och inneslutning besvarar olika frågor. Om du också behöver veta om A helt innehåller B lägger du till en kolumn H med namnet A contains B och anger:

=IF(F2=\"Ready\",AND(B2<=D2,E2<=C2),\"Check inputs\")

Om du vill testa B contains A lägger du till en kolumn I och anger:

=IF(F2=\"Ready\",AND(D2<=B2,C2<=E2),\"Check inputs\")

Dessa tester för inneslutning tillåter gemensamma gränser. Identiska fönster returnerar därför TRUE i båda kolumnerna. Om uppgiften kräver att det finns utrymme på båda sidor vid inneslutning ersätter du båda icke-strikta jämförelserna i den berörda formeln med strikta jämförelser. Det är ett ytterligare redaktionellt villkor; det ändrar inte överlappningsresultatet.

Håll isär kalenderdatum, tidpunkter, förskjutningar och tidszoner

Bestäm vad dina indata betyder innan du använder formlerna. Ett kalenderdatum som 2026-11-10 anger en kalenderdag utan att specificera en tidszon. Det passar för en etikett för publicering under hela dagen. TC39:s API Temporal.PlainDate modellerar uttryckligen den här typen av datum oberoende av tidszon. Temporal.PlainDate.

En tidpunkt identifierar en punkt på tidslinjen. En förskjutning som +01:00 beskriver skillnaden från UTC vid den tidpunkten. En namngiven zon som Europe/Paris anger regionala tidsregler. Det här är olika slags information: en fast förskjutning innehåller inte de varierande reglerna för en namngiven zon. Temporal.ZonedDateTime.

Till exempel identifierar de syntetiska tidsstämplarna 2026-11-10T10:00:00+01:00 och 2026-11-10T09:00:00Z samma tidpunkt. Om du bara jämför de visade klockslagen får du fel ordning.

Kalkylbladsformlerna ovan jämför de värden du anger; de innehåller inget steg för konvertering mellan namngivna tidszoner. För tidsbestämda fönster som kommer från olika tidszoner löser du först varje ändpunkt till en tidpunkt och uttrycker alla ändpunkter i UTC. Spara den ursprungliga zoninformationen separat om du behöver återskapa det avsedda lokala schemat.

För en automatiserad konvertering är den dokumenterade API-vägen att skapa ett Temporal.ZonedDateTime med dess zon och konvertera det med toInstant(). Metoden compare() ordnar exakta tider. När en lokal tid hoppas över eller upprepas vid en förskjutningsövergång erbjuder API:t uttryckliga alternativ för att hantera tvetydigheten, däribland reject. Lös den tvetydigheten innan du importerar jämförbara värden. Konvertering, jämförelse och hantering av tvetydighet i Temporal.ZonedDateTime.

För fönster som gäller hela dagar ska du hålla dig till kalenderdatum. En syntetisk publiceringsperiod som omfattar den 10 till och med den 12 november kan representeras som [2026-11-10, 2026-11-13). Även iCalendar använder dagen efter den sista inkluderade dagen som exklusivt slut för en heldagshändelse. I Numbers anger du dessa gränser med formler av typen DATE så att tidskomponenterna blir enhetliga. RFC 5545:s exempel på händelser som sträcker sig över flera dagar.

Hantera gränsfall utan att ändra frågeställningen

Ett intervall som sträcker sig över natten behöver nästa datum som slutvärde. Ett fönster från den 10 november klockan 23:00 till den 11 november klockan 01:00 är giltigt. Om båda ändpunkterna anges med den 10 november blir intervallet omvänt. Korrigera datumet i stället för att byta plats på värdena automatiskt, eftersom ett byte kan dölja ett inmatningsfel.

Om ändpunkter som tangerar varandra ska räknas för den aktuella uppgiften använder du AND(B2<=E2,D2<=C2) i G2-formeln. Behåll kontrollen av positiv intervallängd om du inte separat har definierat hur punktformiga händelser ska hanteras. Då ändras gränspolicyn, vilket bör antecknas bredvid tabellen.

Den policyn är också viktig när du använder inbyggda Mac-API:er. Apple dokumenterar Foundations DateInterval som ett slutet intervall som inkluderar båda ändpunkterna och tillåter noll varaktighet. Det tillhandahåller intersects och intersection(with:), men dess modell med slutna intervall skiljer sig från iCalendar-konventionen som används här. För överlappning med positiv varaktighet i kalendern använder du det uttryckliga strikta ändpunktstestet i stället för att anta att ett API:s policy för skärningspunkter motsvarar din uppgift. DateInterval.

Kontrollera tre saker innan du förlitar dig på en jämförelse: att varje ändpunkt har avsedd datum- och tidsbas, att båda fönstren har positiv längd och att exemplet med ändpunkter som tangerar varandra ger det resultat du har valt. När de besluten är tydliga hanterar samma två jämförelser partiell överlappning, fullständig inneslutning och identiska fönster.

Källor