program AddWeeksExample;
{$mode objfpc}{$H+}
uses
SysUtils, DateUtils;
{**
* Adds a specified number of weeks to a given TDateTime value.
*
* @param ADate The base date as TDateTime.
* @param AWeeks The number of weeks to add (can also be negative to subtract).
* @return The resulting TDateTime date.
*}
function AddWeeksToDate(const ADate: TDateTime; AWeeks: Integer): TDateTime;
begin
// IncWeek safely adds weeks while managing leap years,
// month-end boundaries, and year rollovers automatically.
Result := IncWeek(ADate, AWeeks);
end;
var
BaseDate: TDateTime;
ResultDate: TDateTime;
WeeksToAdd: Integer;
begin
// Initialize a sample date: November 8, 2026
BaseDate := EncodeDate(2026, 11, 8);
WeeksToAdd := 4;
// Perform the addition
ResultDate := AddWeeksToDate(BaseDate, WeeksToAdd);
// Display the formatted results
Writeln('Original date: ', FormatDateTime('yyyy-mm-dd', BaseDate));
Writeln('After adding ', WeeksToAdd, ' weeks: ', FormatDateTime('yyyy-mm-dd', ResultDate));
end.
(*
run:
Original date: 2026-11-08
After adding 4 weeks: 2026-12-06
*)