Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Hora entre horas (https://www.clubdelphi.com/foros/showthread.php?t=90132)

muli 13-04-2016 14:40:13

Hora entre horas
 
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.
Código Delphi [-]
if (fechahora>=fechahorainicio) and (fechahora<=fechafinal) then
begin
  hazloquesea;
  ...
end;

AgustinOrtu 13-04-2016 18:16:20

Revisa la unidad DateUtils

Código Delphi [-]
{ 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:

Código Delphi [-]
function TimeInRange(ATime: TTime; AStartTime, AEndTime: TTime): Boolean;
begin
  Result := (Frac(AStartTime) <= Frac(ATime)) and (Frac(ATime) <= Frac(AEndTime));
end;

LineComment Saludos


La franja horaria es GMT +2. Ahora son las 12:10:57.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi