Es muy común cuando se trabaja con rangos de fecha y hora que se utiliza un rango que es inclusivo al principio y exclusivo al final. Por ejemplo:
(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
Un valor está dentro del rango cuando es menor o igual que el inicio y mayor que (pero no igual) el final. En el ejemplo anterior, 02:00
pertenece al segundo rango, no al primero. En otras palabras:
Start <= value < End
O de manera equivalente,
Start <= value AND End > value
En Matemáticas, usando Notación de intervalo , esto se conoce como intervalo "medio abierto".
[Start, End)
Este es siempre un mejor enfoque que la idea de usar un valor como 01:59:59
. Considere si tuviera que restar End - Start
para obtener una duración. Espero que la respuesta sea una hora, no 59 minutos y 59 segundos.
La mayoría de los ejemplos usan los términos Start/End
, pero a veces verás Begin/End
o Start/Stop
. Personalmente, creo que el mejor conjunto de términos para usar cuando tiene un rango inclusivo/exclusivo es Start/Until
. Tiene la ventaja adicional de que ambos términos tienen 5 caracteres, se alinean alfabéticamente y transmiten explícitamente que la fecha de finalización es exclusiva.
Además, cuando habla de eventos distintos, debe registrar sus horas como UTC para evitar confusiones en torno a las zonas horarias. Esto es incluso importante para las aplicaciones locales, ya que muchas zonas horarias pasan por transiciones de ahorro de luz diurna. No desea que los valores que registre en la base de datos sean ambiguos. En MySQL, puede usar el TIMESTAMP
tipo de datos para asegurarse de que los valores se almacenen como UTC, o puede usar el DATETIME
tipo de datos si puede estar seguro de que está trabajando con valores UTC en el código de su aplicación.