Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   cuantos domingos tiene un periodo (https://www.clubdelphi.com/foros/showthread.php?t=18502)

poliburro 14-02-2005 18:24:09

cuantos domingos tiene un periodo
 
Pues tengo problemas para sacar el algoritmo que de un periodo dado me retorne el numero de domingos que hay en ese periodo.

Si alguien me pudiera hechar la mano gracias

delphi.com.ar 14-02-2005 18:58:36

Podrías utilizar WeeksBetween o DaysBetween entre las dos fecha, y dependiendo la posición en la semana de las fechas será un domingo menos o no.

Saludos!

poliburro 14-02-2005 19:16:32

pues asi me quedo
 
Function GetSundays(IniDate: TDateTime; EndDate: TDateTime): Integer;
Var
Sundays: Integer;
Begin
Sundays := WeeksBetween(IniDate,EndDate);
If DayOfWeek(EndDate) = 1 Then Result := SunDays + 1
Else Result := SunDays;
End;

jafl1965 14-02-2005 19:38:27

Y si tu período también empieza el domingo? Debes validar eso también, porque por ejemplo:
Entre el 6 y el 27 de febrero hay 4 domingos y con tu función devuelve 3. Debes incluir ambos extremos, a no ser, claro, que tus períodos no empiecen nunca un domingo...

poliburro 14-02-2005 19:55:30

mil gracias por la observacion.

:p

poliburro 14-02-2005 20:06:31

asi queda entonces
 
asi quedo finalmente

Function GetSundays(IniDate: TDateTime; EndDate: TDateTime): Integer;
Var
Sundays: Integer;
Begin
Sundays := WeeksBetween(IniDate,EndDate);
If DayOfWeek(IniDate) = 1 then Sundays := Sundays + 1;
If DayOfWeek(EndDate) = 1 Then Sundays := SunDays + 1;
Result := SunDays;
End;

thelibmx 19-06-2007 01:15:20

cuantos sabados y domingos hay de un rango de fechas
 
hola, me pregunto si podria ocupar esta misma funcion pero tambien para que me cuente los sabados, como podria hacerlo? es decir que el resultado final sea la suma de los sabados y los domingos del rango de las fechas puestas, podria modificar esa funcion y contar los sabados y domingos al mismo tiempo? ¿? o tendria que contar primero los domingos y luego los sabados en esa fecha,si alguien me pudiera auxiliar se los agradeceria muchisimo, si no pues de todos modos se los agradezco ja ja ja :)

Lepe 19-06-2007 10:29:47

....Esto.... si tiene 3 domingos, fijo que también tiene 3 sábados :p
Aunque existe el caso especial: habiendo 1 domingo, tiene 2 sábados ;)

No es nada difícil hacer esa rutina, mira un calendario, enseguida lo verás.

Saludos

thelibmx 22-06-2007 00:50:50

mmm, estaba viendo esa funcion y parece ser que en periodos mayores a una semana funciona bien, pero no funciona cuando es menos de una semana, por ejemplo si ponemos 08/06/2007 y 11/06/2007 el resultado que arroja es 0, y moviendo las fechas siempre y cuando sea menos de 7 dias el resultado sigue siendo 0 sabiendo que hay un domingo de por medio q no cuenta.

Supongo que esto es por que la funcion cuenta las semanas que hay en ese rango y no los dias en especifico, alguna sugerencia para podertomar en cuenta ese detalle...

¿ Existira alguna funcion que te devuelva cuantos dias domingos o lunes o martes etc... existen en un periodo de fechas ? ¿?

Seria bueno que existiera algo como WeeksBetween() pero de dias no?.. creo que seria asi SundaysBetween() jeje je.. pero creo que no existe jaja, si alguien conoce algo parecido seria muy bueno :) buen dia!!

egostar 22-06-2007 02:03:36

Me tome la libertad de modificar la rutina de poliburro con sabados y domingos, además te recomiendo que leas la ayuda de Delphi sobre el manejo de fechas.

Código Delphi [-]
function TForm1.GetSundays(IniDate: TDateTime; EndDate: TDateTime): Integer;
var
  Sundays: Integer;
  i,Dias : Integer;
begin
  Sundays := 0;
  Dias := DaysBetween(IniDate,EndDate);
  for I := 0 to dias - 1 do begin
      If DayOfWeek(IniDate+i) = 1 then Sundays := Sundays + 1;
      If DayOfWeek(IniDate+i) = 7 then Sundays := Sundays + 1;
  end;
  Result := SunDays;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  ShowMessage(inttostr(GetSundays(strtodate('01/05/2007'),strtodate('30/06/2007'))));
end;

Salud OS.

thelibmx 22-06-2007 02:35:01

contador de sabados y domingos de un periodo de fechas
 
muy buena tu funcion, yo tambien modifique un poco el codigo y lo adapte a lo que yo queria, que es contar los sabados y domingos de un periodo de fechas, les dejo el codigo para que lo chequen y me den sus sugerencias para mejorarlo o acortarlo je je
Cita:


function cuentasabadosydomingos(fechaInicial:Tdatetime;fechafinal:Tdatetime):Integer;
var
Dias:Integer;
e,c:integer;
totaldominsaba:integer;
begin
Dias := Trunc (fechafinal) - Trunc (fechainicial);
dias:=dias+1;
totaldominsaba:=0;
c:=(Dias-1);
for e:=0 to c do
begin
if (DayOfTheWeek(fechaInicial)=6) or(DayOfTheWeek(fechaInicial)=7) then
begin totaldominsaba:=totaldominsaba+1;
end; fechaInicial:=IncDay(fechaInicial,1);
end;cuentasabadosydomingos:=totaldominsaba;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
e3.Text:=inttostr(cuentasabadosydomingos(DateTimePicker1.date,DateTimePicker2.date));
end;


egostar 22-06-2007 02:45:12

Hola thelibmx, en esa rutina estas contando viernes y sabados.

Los dias se cuentan de 1 a 7 comenzando en Domingo.

Salud OS.

thelibmx 22-06-2007 03:12:20

Cita:

Empezado por egostar
Hola thelibmx, en esa rutina estas contando viernes y sabados.

Los dias se cuentan de 1 a 7 comenzando en Domingo.

Salud OS.

creo que no entendi el comentario o el error, segun las pruebas que hice, sabado vale 6 y domingo 7, entonces cada que hay un sabado o domingo suma 1, podrias explicarte un poco, o tal ves tuviste tu algun error, por que incluso cuando selecciono alguna fecha en viernes, mi resultado es 0, ¿?..

egostar 22-06-2007 03:18:29

Cierto, es que estas usando la función DayoftheWeek, la cual efectivamente, toma los valores de 1 a 7 comenzando en Lunes. Yo estoy usando DayofWeek, por eso la confusión.

Aqui te pongo la ayuda de Delphi

Cita:

Empezado por Ayuda Delphi
DayOfWeek returns the day of the week of the specified date as an integer between 1 and 7, where Sunday is the first day of the week and Saturday is the seventh.

Note:
DayOfWeek is not compliant with the ISO 8601 standard, which defines Monday as the first day of the week. For an ISO 8601 compliant version, use the DayOfTheWeek function instead.


Salud OS.

thelibmx 22-06-2007 06:01:30

Cita:

Empezado por egostar
Cierto, es que estas usando la función DayoftheWeek, la cual efectivamente, toma los valores de 1 a 7 comenzando en Lunes. Yo estoy usando DayofWeek, por eso la confusión.

Aqui te pongo la ayuda de Delphi




Salud OS.


entonces ya no entendi, mi funcion esta bien no?, o cual es el punto, hasta donde vi hace lo q queria... je je je.. pero es bueno conocer otras funciones .. bueno saludos a todos

Lepe 22-06-2007 11:30:59

Tu rutina está bien, lo que ocurre, es que DayofWeek considera el 1 como Lunes, DayofTHEWeek considera el 1 como Domingo.

Para evitar líos hay un estandar ISO, y se debería usar dayofTHEweek.

Ya que vamos a realizar un bucle por todos los días, haremos una rutina general (me gustaba más la rutina de poliburro ;)):

Código Delphi [-]

type TDay = (Monday = 1,
  Tuesday = 2,
  Wednesday = 3,
  Thursday = 4,
  Friday = 5,
  Saturday = 6,
  Sunday = 7);

  TDays = set of TDay;



function CountDays(ini:TdateTime; Fin:Tdatetime;const DaysToCount: TDays):integer;
var i:integer;
begin
  Result := 0;
  for I := trunc(ini) to trunc(fin)  do
  if Tday(Dayoftheweek(i)) in DaysToCount then
    inc(Result);
end;


uso de la rutina:
Código Delphi [-]
begin
  ShowMessage(inttostr(CountDays(DateTimePicker1.DateTime,
                               DateTimePicker2.DateTime, 
                               [Saturday,Sunday])));
end;

Edito: Cambio los tipos enumerados por interferencia con las constantes de Sysutils dayMonday, dayTuesday etc.

thelibmx 22-06-2007 16:59:02

ok me parece bien la rutina, pues hay muchas maneras jeje, hay que utilizar la mas estandar...SAludos.


La franja horaria es GMT +2. Ahora son las 00:41:43.

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