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.