Ver Mensaje Individual
  #10  
Antiguo 10-03-2017
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Reputación: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Tienes 2 problemas.

Como almacenar y como mostrar.

Como almacenar ya te dieron tips. No hay problema en incluso ser mas directo y guardar algo asi : "7:00 a.m - 5:03 p.m", lo cual tendrias que parsear, o pones en 2 campos decimales con 2 digitos: "7.00", "17.03".

E incluso puede que tu BD ya tenga algo nativo. En postgresql:

https://www.postgresql.org/docs/9.2/...angetypes.html
Código SQL [-]
CREATE TABLE reservation (room int, during tsrange);
INSERT INTO reservation VALUES
    (1108, '[2010-01-01 14:30, 2010-01-01 15:30)');

-- Containment
SELECT int4range(10, 20) @> 3;

-- Overlaps
SELECT numrange(11.1, 22.2) && numrange(20.0, 30.0);

-- Extract the upper bound
SELECT upper(int8range(15, 25));

-- Compute the intersection
SELECT int4range(10, 20) * int4range(15, 25);

-- Is the range empty?
SELECT isempty(numrange(1, 5));

Y si tu BD permite crear tipos propios aun si no lo tiene se le puede crear uno (tal como harias en cualquier lenguaje). Eso funciona hasta en sqlite.

---

Para mostrar, cual es la forma mas directa?

Tal como en la BD. Pones 2 edit con mascara que escriban:

[7:00] - [17:03]

Y ya. Los combos y similares NO SON TAN EFICIENTES COMO LA EDICION DIRECTA! De hecho como se haria totalmente libre? En una sola caja uno escribe:

7:00 a 17:03

Y listo. Rápido. Hay que parsear? Si, pero simplemente te estoy dando a entender que las soluciones simples (al usuario) están a la mano.

Y si quieres algo mas visual? Un control de rango, tipo:

http://stackoverflow.com/questions/4...ange-of-values
http://www.tmssoftware.com/site/advtrackbar.asp
__________________
El malabarista.
Responder Con Cita