[Back to DATETIME SWAG index] [Back to Main SWAG index] [Original]
{A function and test program for computing the work week under one common
definition.
Written 94/10/05, Kim Kokkonen, TurboPower Software
}
uses
opdate; {tpdate ok too}
function WeekOfYear(Julian : Date) : Integer;
{-Return the week-of-year from a julian date. As defined here, the week
always starts on a Sunday. Week 1 starts on the first Sunday of the
year. Returns 0 for days earlier than that, and -1 for invalid dates.}
var
Day, Month, Year : Integer;
FirstJulian : Date;
FirstDay : DayType;
begin
{Exit for invalid dates}
if (Julian < MinDate) or (Julian > MaxDate) then begin
WeekOfYear := -1;
exit;
end;
{Compute FirstJulian, the julian date for the first Sunday in the year}
DateToDMY(Julian, Day, Month, Year);
FirstJulian := DMYToDate(1, 1, Year);
FirstDay := DayOfWeek(FirstJulian);
if FirstDay <> Sunday then
inc(FirstJulian, 7-Ord(FirstDay));
if Julian < FirstJulian then
WeekOfYear := 0
else
WeekOfYear := (Julian-FirstJulian+7) div 7;
end;
var
s : string;
d : date;
begin
repeat
Write('Enter date (dd/mm/yy): ');
ReadLn(s);
if s = '' then
halt;
if (Length(s) = 8) and (s[3] = '/') and (s[6] = '/') then begin
d := DateStringToDate('dd/mm/yy', s);
WriteLn('Week: ', WeekOfYear(d));
end else
WriteLn('Invalid date format');
until False;
end.
[Back to DATETIME SWAG index] [Back to Main SWAG index] [Original]