function GetWeekNumber( aDateTime : TDateTime) : Word; var Y,M,D : Word; begin DecodeDate( aDateTime, Y, M, D); dtTmp:= Result:=(Trunc( aDateTime - EnCodeDate( Y, 1, 1)) + ( DayOfWeek( EnCodeDate( Y, 1, 1)) - 1)) DIV 7; if Result = 0 then Result := 51 else Result := Result - 1; end;
function getWeekNumber(today: Tdatetime): string; const Fiddle : array[1..7] of Byte = (6,7,8,9,10,4,5); var present, startOfYear: Tdatetime; firstDayOfYear, weekNumber, numberOfDays: integer; year, month, day: word; YearNumber: string;
begin present:= trunc(today); //truncate to remove hours, mins and secs decodeDate(present, year, month, day); //decode to find year startOfYear:= encodeDate(year, 1, 1); //encode 1st Jan of the year
//find what day of week 1st Jan is, then add days according to rule firstDayOfYear:= Fiddle[dayOfWeek(startOfYear)];
//calc number of days since beginning of year + additional according to rule numberOfDays:= trunc(present - startOfYear) + firstDayOfYear;
//calc number of weeks weekNumber:= trunc(numberOfDays / 7);
//Format year, needed to prevent millenium bug and keep the Fluffy Spangle happy YearNumber:= formatDateTime('yyyy',present);
YearNumber:= YearNumber + 'W';
if weekNumber < 10 then YearNumber:= YearNumber + '0';//add leading zero for week
if weekNumber = 0 then //recursive call for year begin/end... //see if previous year end was week 52 or 53 result:= getWeekNumber(encodeDate(year - 1, 12, 31))
else if weekNumber = 53 then //if 31st December less than Thursday then must be week 01 of next year if dayOfWeek(encodeDate(year, 12, 31)) < 5 then begin YearNumber:= formatDateTime('yyyy',encodeDate(year + 1, 1, 1)); result:= YearNumber + 'W01'; end;
Jeg kan ikke finde ud af at få resultatet af dit andet eksempel placeret i start.table1.FieldByName('Ugenummer'), sådan jeg kan se resultatet af udregningen!
Det vil være en stor hjælp for mig om du evt. kan placere det rigtigt indenfor:
procedure TMainForm.MonthCalendar1DblClick(Sender: TObject); begin start.table1.FieldByName('Dato').AsDateTime :=MonthCalendar1.Date;
function WeekNumber( ADay: TDateTime): Integer; var Year, Month, Day: Word; WeekDay : integer; DumDay: TDateTime; diff, diff2: integer; begin DumDay:= ADay; DecodeDate(DumDay, Year, Month, Day); DumDay:= EncodeDate( Year, 1, 1); { first day of year } WeekDay:= DayOfWeek(DumDay); if (WeekDay < 6) and (Weekday > 1) then { monday -> thursday } DumDay:= DumDay - WeekDay + 2 else begin if WeekDay > 5 then DumDay:= DumDay - WeekDay + 9; if WeekDay = 1 then DumDay:= DumDay + 1; end; { DumDay points to monday in week number one } diff:= Trunc( ADay - DumDay); if diff < 0 then begin Result:= WeekNumber(ADay - 7) + 1; { last week of previous year } Exit; end; DumDay:= EncodeDate( Year, 12, 31); { last day of year } WeekDay:= DayOfWeek(DumDay); diff2:= Trunc(DumDay - ADay); if (diff2 < 3) and { one of last three days of year } (WeekDay > 1) and (WeekDay < 5) and { monday -> wednesday } (WeekDay > diff2 + 1) then begin Result:= 1; { first week of next year } Exit; end; result:= diff div 7 + 1; end;
Altså det var din sidste kommentar, der virkede. Tak igen:) Jeg bruger Delphi 5
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.