Det er meget almindeligt, når man arbejder med dato- og tidsintervaller, at man bruger et interval, der er inkluderende i starten og eksklusivt i slutningen. For eksempel:
(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
En værdi er inden for området, når den er mindre end eller lig med starten og større end (men ikke lig med) slutningen. I eksemplet ovenfor, 02:00
tilhører det andet område, ikke det første. Med andre ord:
Start <= value < End
Eller tilsvarende,
Start <= value AND End > value
I matematik skal du bruge Intervalnotation , dette er kendt som et "halvt åbent" interval.
[Start, End)
Dette er altid en bedre tilgang end ideen om at bruge en værdi som 01:59:59
. Overvej, om jeg skulle trække End - Start
fra for at få en varighed. Jeg forventer, at svaret er en time, ikke 59 minutter og 59 sekunder.
De fleste eksempler bruger termerne Start/End
, men nogle gange vil du se Begin/End
eller Start/Stop
. Personligt tror jeg, at det bedste sæt termer at bruge, når du har et inkluderende/eksklusivt interval, er Start/Until
. Det har den ekstra fordel, at begge termer er på 5 tegn, alfabetisk opstillet og udtrykkeligt angiver, at slutdatoen er eksklusiv.
Når du taler om forskellige hændelser, bør du også registrere dine tider som UTC for at forhindre forvirring omkring tidszoner. Dette er endda vigtigt for lokale applikationer, da mange tidszoner gennemgår sommertid overgange. Du ønsker ikke, at de værdier, du registrerer i databasen, skal være tvetydige. I MySQL kan du bruge TIMESTAMP
datatype for at sikre, at værdier er gemt som UTC, eller du kan bruge DATETIME
datatype, hvis du kan være sikker på, at du arbejder med UTC-værdier i din applikationskode.