PDA

Ver la Versión Completa : Hora entre horas


muli
13-04-2016, 14:40:13
Alguien conoce alguna función que me devuelva true si una hora (la actual por ejemplo), estaría comprendida entre una hora inicial y una hora final, independientemente de la fecha.

Saludos.

Casimiro Notevi
13-04-2016, 15:05:15
Por supuesto, es muy fácil, ¿cómo lo harías por lógica? :)

muli
13-04-2016, 15:31:11
Hombre, por lógica pienso que siendo A la hora que quiero mirar sería: Si A>horainicial y A<horafinal A estaría entre la hora inicial y l ahora final.Todo en campo time, claro en caso de querer desde las once de la noche hasta las 2 de madrugada, tendria que hacer uso de la fecha. No?

saludos

Casimiro Notevi
13-04-2016, 16:01:37
Una hora o una fecha-hora es un valor numérico, así que es tan simple como has escrito. La parte entera es la fecha y los decimales es la hora ( ejemplo: 5245112212.3646745)
No sé si preguntas por hacerlo en delphi o para una base de datos, pero tienes muchas formas de hacerlo, dependiendo de lo que exactamente estés buscando.
if (fechahora>=fechahorainicio) and (fechahora<=fechafinal) then
begin
hazloquesea;
...
end;

AgustinOrtu
13-04-2016, 18:16:20
Revisa la unidad DateUtils


{ InRange functions }

function DateTimeInRange(ADateTime: TDateTime; AStartDateTime, AEndDateTime: TDateTime; aInclusive: Boolean = True): Boolean;
function DateInRange(ADate: TDate; AStartDate, AEndDate: TDate; AInclusive: Boolean = True): Boolean;
function TimeInRange(ATime: TTime; AStartTime, AEndTime: TTime; AInclusive: Boolean = True): Boolean;

roman
13-04-2016, 19:14:51
Creo que no todas las versiones de Delphi traen esas funciones (no la veo en Delphi 7, al menos). En todo caso, siguiendo los pasos de maese Casimiro, podríamos usar esta versión simplificada:


function TimeInRange(ATime: TTime; AStartTime, AEndTime: TTime): Boolean;
begin
Result := (Frac(AStartTime) <= Frac(ATime)) and (Frac(ATime) <= Frac(AEndTime));
end;


LineComment Saludos