Date format
From: Martin Brooks
<martin@image-data.com>
I have a very urgent problem i am
currently working on a college project
where i have to check the validity of dates entered into a
maskedit in
this format - __/__/____ e.g. 12/12/1997.
Ages ago, I
did a very silly date encoder/decoder that did check that a date was valid. See
code below.
function CheckDateFormat(SDate:string):string;
var
IDateChar:string;
x,y:integer;
begin
IDateChar:='.,\/';
for y:=1 to length(IDateChar) do
begin
x:=pos(IDateChar[y],SDate);
while x>0 do
begin
Delete(SDate,x,1);
Insert('-',SDate,x);
x:=pos(IDateChar[y],SDate);
end;
end;
CheckDateFormat:=SDate;
end;
function
DateEncode(SDate:string):longint;
var
year,month,day:longint;
wy,wm,wd:longint;
Dummy:TDateTime;
Check:integer;
begin
DateEncode:=-1;
SDate:=CheckDateFormat(SDate);
Val(Copy(SDate,1,pos('-',SDate)-1),day,check);
Delete(Sdate,1,pos('-',SDate));
Val(Copy(SDate,1,pos('-',SDate)-1),month,check);
Delete(SDate,1,pos('-',SDate));
Val(SDate,year,check);
wy:=year;
wm:=month;
wd:=day;
try
Dummy:=EncodeDate(wy,wm,wd);
except
year:=0;
month:=0;
day:=0;
end;
DateEncode:=(year*10000)+(month*100)+day;
end;
DateSer Function
From: "Damir Bulic - Ramayana"
<damir.bulic@zg.tel.hr>
Hi, this is
a source of a function DateSer I wrote, because I worked in VB before, and this
was a very useful function. Delphi unfortunately doesn't have it. Use it in a
form of
DecodeDate(Date,y,m,d);
NewDate:=DateSer(y-4,m+254,d+1234);
or
something like that....
function DateSer(y,m,d: Integer): TDateTime;
const
mj: array[1..12] of Integer=(31,28,31,30,31,30,31,31,30,31,30,31);
var
add: Integer;
begin
while(true) do begin
y:=y+(m-1) div 12;
m:= (m-1) mod 12 +1;
if m<=0 then begin
Inc(m,12);
Dec(y);
end;
if ((y mod 4 = 0) and
((y mod 100<>0) or (y mod 400=0)))
and (m=2) then
add:=1 //add one day in February
else
add:=0;
if (d>0) and (d<=(mj[m]+add)) then break;
if d>0 then begin Dec(d,mj[m]+add); Inc(m); end
else begin Inc(d,mj[m]+add); Dec(m); end;
end;
Result:=EncodeDate(y,m,d);
end;
Automatic Year in
a date edit
"Henk Schreij" <schreij@daxis.nl>
Als je een
Datumveld intypt in een Database, dan kun je het jaartal weglaten, omdat de
computer die voor je invult met het huidige jaar. Kan zoiets ook in een gewoon Edit-veld?
Het
antwoord is ja, dat kan met:
PROCEDURE TForm1.Edit1Exit(Sender:
TObject);
BEGIN
IF Edit1.Text<>'' THEN BEGIN
TRY
StrToDate(Edit1.Text);
EXCEPT
Edit1.SetFocus;
MessageBeep(0);
raise Exception.Create('"'+Edit1.Text
+'" is no valid Date');
END{try};
Edit1.Text:=DateToStr(StrToDate(Edit1.Text));
END{if};
END;