Při práci s rozsahy data a času je velmi běžné, že používáte rozsah, který je na začátku zahrnující a na konci exkluzivní. Například:
(using ISO8601 formatting)
Start End
2013-04-29T01:00:00Z - 2013-04-29T02:00:00Z
2013-04-29T02:00:00Z - 2013-04-29T03:00:00Z
Hodnota je v rozsahu, když je menší nebo rovna začátku a větší než (ale ne rovna) konci. Ve výše uvedeném příkladu 02:00
patří do druhého rozsahu, nikoli do prvního. Jinými slovy:
Start <= value < End
Nebo ekvivalentně,
Start <= value AND End > value
V matematice pomocí intervalové notace , toto je známé jako „polootevřený“ interval.
[Start, End)
Toto je vždy lepší přístup než myšlenka použít hodnotu jako 01:59:59
. Zvažte, zda bych měl odečíst End - Start
získat trvání. Očekával bych, že odpověď bude jednu hodinu, nikoli 59 minut a 59 sekund.
Většina příkladů používá výrazy Start/End
, ale někdy uvidíte Start/End
nebo Start/Stop
. Osobně si myslím, že nejlepší soubor termínů, který lze použít, když máte inkluzivní/exkluzivní rozsah, je Start/Until
. Má další výhodu v tom, že oba výrazy mají 5 znaků, seřazují se abecedně a výslovně uvádějí, že datum ukončení je exkluzivní.
Také, když mluvíte o odlišných událostech, měli byste zaznamenávat své časy jako UTC, abyste předešli zmatkům ohledně časových pásem. To je dokonce důležité pro místní aplikace, protože mnoho časových pásem prochází přechodem na letní čas. Nechcete, aby hodnoty, které zaznamenáte do databáze, byly nejednoznačné. V MySQL můžete použít TIMESTAMP
datový typ, abyste se ujistili, že hodnoty jsou uloženy jako UTC, nebo můžete použít DATETIME
datový typ, pokud si můžete být jisti, že v kódu aplikace pracujete s hodnotami UTC.