Bij het werken met datum-tijdbereiken is het heel gebruikelijk dat je een bereik gebruikt dat aan het begin inclusief is en aan het einde exclusief. Bijvoorbeeld:
(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
Een waarde is binnen bereik als deze kleiner is dan of gelijk is aan het begin en groter dan (maar niet gelijk aan) het einde. In het bovenstaande voorbeeld 02:00
behoort tot de tweede reeks, niet de eerste. Met andere woorden:
Start <= value < End
Of gelijkwaardig,
Start <= value AND End > value
In wiskunde, met behulp van Intervalnotatie , dit staat bekend als een "half-open" interval.
[Start, End)
Dit is altijd een betere benadering dan het idee om een waarde te gebruiken zoals 01:59:59
. Overweeg of ik End - Start
. zou aftrekken een looptijd te krijgen. Ik zou verwachten dat het antwoord één uur is, niet 59 minuten en 59 seconden.
De meeste voorbeelden gebruiken de termen Start/End
, maar soms zie je Begin/End
of Start/Stop
. Persoonlijk denk ik dat de beste set termen die je kunt gebruiken als je een inclusief/exclusief bereik hebt, Start/Until
is. . Het heeft het extra voordeel dat beide termen uit 5 tekens bestaan, alfabetisch op een rij staan en expliciet aangeven dat de einddatum exclusief is.
Als u het over afzonderlijke gebeurtenissen heeft, moet u ook uw tijden als UTC vastleggen om verwarring rond tijdzones te voorkomen. Dit is zelfs belangrijk voor lokale toepassingen, aangezien veel tijdzones door zomertijdovergangen gaan. U wilt niet dat de waarden die u in de database vastlegt, dubbelzinnig zijn. In MySQL kunt u de TIMESTAMP
. gebruiken gegevenstype om ervoor te zorgen dat waarden worden opgeslagen als UTC, of u kunt de DATETIME
. gebruiken gegevenstype als u zeker weet dat u met UTC-waarden in uw toepassingscode werkt.