Много често при работа с диапазони от дата и време е да използвате диапазон, който е включващ в началото и изключителен в края. Например:
(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
Стойността е в диапазона, когато е по-малка или равна на началото и по-голяма от (но не равна на) края. В примера по-горе 02:00
принадлежи към втория диапазон, а не към първия. С други думи:
Start <= value < End
Или еквивалентно,
Start <= value AND End > value
В математиката с помощта на Интервална нотация , това е известно като "полуотворен" интервал.
[Start, End)
Това винаги е по-добър подход от идеята за използване на стойност като 01:59:59
. Помислете дали трябва да извадя End - Start
за да получите продължителност. Очаквам отговорът да бъде един час, а не 59 минути и 59 секунди.
Повечето примери използват термините Start/End
, но понякога ще видите Start/End
или Start/Stop
. Лично аз смятам, че най-добрият набор от термини, които да използвате, когато имате включващ/изключителен диапазон е Start/Until
. Той има допълнителното предимство, че двата термина са по 5 знака, подредени по азбучен ред и изрично указват, че крайната дата е изключителна.
Освен това, когато говорите за различни събития, трябва да записвате времето си като UTC, за да предотвратите объркване около часовите зони. Това дори е важно за локални приложения, тъй като много часови зони преминават през лятно часово време. Не искате стойностите, които записвате в базата данни, да са двусмислени. В MySQL можете да използвате TIMESTAMP
тип данни, за да сте сигурни, че стойностите се съхраняват като UTC, или можете да използвате DATETIME
тип данни, ако можете да сте сигурни, че работите с UTC стойности в кода на приложението си.