Witam wszystkich.
Mam takie pytanie jak sprawdzić czy wskazana data znajduje sie w przydziale od-do, mam np. date urodzin chcĘ sprawdzić czy ten ktoś mieści się w przedziale od xx.xx.xxxx do xx.xx.xxxx. Starałem się to zrobić przy pomocy DecodeDate i porównywać lata, m-c i dni ale dostaje komunikat "incopatible types" a obydwie zmienne to Word. Czy ktoś może zna rozwiązanie?
0
0
Zakoduj wszystko jako TDateTime i porownuj wartosci TDateTime za pomocą > i <
0
albo tak ...
int isbetween(inr d1,int m1,int y2,int d2,int m2,int y2,int d,int m,int y){
unsigned long a=(unsigned long)((y<<9)|(m<<5)|d);
return (a<=(unsigned long)((y2<<9)|(m2<<5)|d1))&(a>=(unsigned long)((y1<<9)|(m1<<5)|d1));
}
function isbetween(d1,m1,y1,d2,m2,y2,d,m,y:word)boolean;
var a:dword;
begin
a:=dword((y shl 9)or(m shl 5)or d);
isbetween:=(a<=dword((y2 shl 9)or(m2 shl 5)or d2)and(a>=dword((y1 shl 9)or(m1 shl 5)or d1);
end;
Jako 1 jest dolna granica, 2 gorna, a bez cyferek data aktualna.
dzień to max 31 (wiec 5 bitow wystarczy 32 mozliwosci) miesiący jest 12 (dla uproszczenia dajmy 16 mizliwosci - 4 bity) i lata jako nabardziej znaczące. Przesunięcia bitowe sa jednymi z szybszych operacji.
Sam juz nie wiem jaki to dział i o jaki jezyk sie pytasz
0
Można by funkcją copy zrobić z Daty xx.xx.xxxx jeden ciąg : xxxxxxxx i wtedy porównać czy data mieści się w przedziale
0
Dzięki wszystkim za odpowiedź, działa.