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);
{Затем преобразовываем полученную величину в дату.
Это всегда будет правильной датой. Для проверки делаем обратное преобразование.
Результат проверки передаем как выходной параметр функции.}
test := Julian2date(julian);
if date = test then
result := true
else
result := false;
end;
function DayOfTheWeek(date: string): string;
{Получаем дату в формате YYYYMMDD
и возвращаем день недели.}
var
julian: longint;
begin
julian := (Date2julian(date)) mod 7;
case julian of
0: result := 'Понедельник';
1: result := 'Вторник';
2: result := 'Среда';
3: result := 'Четверг';
4: result := 'Пятница';
5: result := 'Суббота';
6: result := 'Воскресенье';
end;
end;
end.
|