**[**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**]**