Easter is a moveable religious feast of Christianity. Moveable feasts don't have a fixed date, and the Christian moveable feasts all have a fixed relation to Easter. So for instance if Easter is late for a given year, Whit Sunday (which is celebrated the 7th Sunday after Easter) will also be late.
Calculation of the Easter date was set at the First Council of Nicea in 325 AD as the first Sunday following the paschal full moon, which is the first full moon that falls on or after the vernal equinox. The Church doesn't follow the exact date of the paschal full moon, however, but an approximation. This page allows you to calculate the date of Easter for Western Christianity. (Eastern rites use a different calculation.)
The algorithm used here first appeared in Butcher's Ecclesiastical Calendar, published in 1876. It reappeared in a number of other publications, including the notable Astronomical Algorithms (1991) by Jean Meeus. The algorithm holds for any year in the Gregorian Calendar.
In the Delphi code below, div represents an integer division neglecting the remainder, while mod is the modulo operator. So 30 div 7 = 4, and 30 mod 7 = 2.
uses DateUtils; function EasterDate(aDateTime: TDateTime): TDateTime; var Year, Month, Date, a, b, c, d, e, f, g, h, i, k, l, m, n: Word; begin Year := YearOf(aDateTime); a := Year mod 19; b := Year div 100; c := Year mod 100; d := b div 4; e := b mod 4; f := (b + 8) div 25; g := (b - f + 1) div 3; h := (19 * a + b - d - g + 15) mod 30; i := c div 4; k := c mod 4; l := (32 + 2 * e + 2 * i - h - k) mod 7; m := (a + 11 * h + 22 * l) div 451; n := h + l - 7 * m + 114; Month := n div 31; // 3 = March, 4 = April Date := (n mod 31) + 1; // date in Easter Month Result := EncodeDateTime(Year, Month, Date, 0, 0, 0, 0); end;