Hola Daniel,
para esto, lo más cómodo es guardar fecha y hora de inicio de la reserva y fecha y hora del final de la reserva en formato datetime
.
Por ejemplo si reservo hoy por 2hs desde las 20, será:
Inicio = 2014-01-30 20:00:00
Fin = 2014-01-30 22:00:00
En la interfaz no hay problema en que pongas por ejemplo día y hora de inicio y cantidad de horas: sumas esas horas a la fecha de inicio y obtienes la fecha de finalización.
Después con las funcones de manejo de fechas y horas de la DB, obtenés todo lo que te haga falta:
DAY()
DAYOFMONTH()
HOUR()
MINUTE()
etc
Luego, haciendo querys, podés obtener si hay una reserva para esta hora o no, todas las reservas de una franaja horaria, etc y mostrarlas en una tabla HTML o validar si se puede reservar o no una cancha. Las funciones se pueden poner tanto en la parte del SELECT como en la aprte del WHERE para filtrar resultados.
En este enlace http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html tenés un listado de las funciones para manejo de fechas y horas.
Saludos!