Читать «Советы по Delphi. Версия 1.0.6» онлайн - страница 12
Валентин Озеров
If ShortDateFormat[1]='d' then Result:= IntToStr(Q)+'/3/'+IntToStr(Year)
else Result:='4/'+IntToStr(Q-31)+'/'+IntToStr(Year);
end else begin
If ShortDateFormat[1]='d' then Result:= IntToStr(Q-31)+'/4/'+IntToStr(Year)
else Result:='4/'+IntToStr(Q-31)+'/'+IntToStr(Year);
end;
{вычисление страстной пятницы}
If Q<32 then begin
If ShortDateFormat[1]='d' then GF:= IntToStr(Q-2)+'/3/'+IntToStr(Year)
else GF:='3/'+IntToStr(Q-2)+'/'+IntToStr(Year);
end else begin
If ShortDateFormat[1]='d' then GF:= IntToStr(Q-31-2)+'/4/'+IntToStr(Year)
else GF:='4/'+IntToStr(Q-31-2)+'/'+IntToStr(Year);
end;
end;
Дни недели
Кто-нибудь пробовал написать функцию, возвращающую для определенной даты день недели?
Моя функция как раз этим и занимается.
unit datefunc;
interface
function checkdate(date : string): boolean;
function Date2julian(date : string): longint;
function Julian2date(julian : longint): string;
function DayOfTheWeek(date: string): string;
function idag: string;
implementation
uses sysutils;
function idag() : string;
{Получает текущую дату и возвращает ее в формате YYYYMMDD для использования
другими функциями данного модуля.}
var
Year, Month, Day: Word;
begin
DecodeDate(Now, Year, Month, Day);
result:= IntToStr(year)+ IntToStr(Month) +IntToStr(day);
end;
function Date2julian(date : string) : longint;
{Получает дату в формате YYYYMMDD.
Если у вас другой формат, в первую очередь преобразуйте его.}
var
month, day, year:integer;
ta, tb, tc : longint;
begin
month:= strtoint(copy(date,5,2));
day:= strtoint(copy(date,7,2));
year:= strtoint(copy(date,1,4));
if month > 2 then month:= month – 3
else begin
month:= month + 9;
year:= year – 1;
end;
ta:= 146097 * (year div 100) div 4;
tb:= 1461 * (year MOD 100) div 4;
tc:= (153 * month + 2) div 5 + day + 1721119;
result:= ta + tb + tc
end;
function mdy2date(month, day, year : integer): string;
var
y, m, d : string;
begin
y:= '000'+inttostr(year);
y:= copy(y,length(y)-3,4);
m:= '0'+inttostr(month);
m:= copy(m,length(m)-1,2);
d:= '0'+inttostr(day);
d:= copy(d,length(d)-1,2);
result:= y+m+d;
end;
function Julian2date(julian : longint): string;
{Получает значение и возвращает дату в формате YYYYMMDD}
var
x,y,d,m : longint;
month,day,year : integer;
begin
x:= 4 * julian – 6884477;
y:= (x div 146097) * 100;
d:= (x MOD 146097) div 4;
x:= 4 * d + 3;
y:= (x div 1461) + y;
d:= (x MOD 1461) div 4 + 1;
x:= 5 * d – 3;
m:= x div 153 + 1;
d:= (x MOD 153) div 5 + 1;
if m < 11 then month:= m + 2
else month:= m – 10;
day:= d;
year:= y + m div 11;
result:= mdy2date(month, day, year);
end;
function checkdate(date : string): boolean;
{Дата должна быть в формате YYYYMMDD.}
var
julian: longint;
test: string;
begin
{Сначала преобразовываем строку в юлианский формат даты.
Это позволит получить необходимое значение.}
julian:= Date2julian(date);
{Затем преобразовываем полученную величину в дату.
Это всегда будет правильной датой. Для проверки делаем обратное преобразование.
Результат проверки передаем как выходной параметр функции.}