Returns the date of the nth weekday within the specified month and year.

View versions (1)

Interface

#include <codecogs/units/date/nthweekday.h>

using namespace Units::Date;

Calculates the date of the nth occurance of a particular weekday (Sunday to Saturday) within a specified month and year. Many public holidays and other events (see also summertime) are performed on specific days of the week; very often the first or last occurance of that day within the month. This function uses weekdays within the Gregorian calendar to return the serial Julian date (number of days since 24 November 4714BC).

For example, US events include:

  • Martin Luther King Day, third Monday in January
  • President's Day, third Monday in February
  • Armed Forces Day, third Saturday in May
  • Mother's Day, second Sunday in May
  • Memorial Day, last Monday in May
  • Father's Day, third Sunday in June
  • Labor Day, first Monday in September
  • Columbus Day, second Monday in October
  • Thanksgiving Day, fourth Thursday in November

UK holidays include:

  • May Day Bank Holiday, first Monday in May
  • Spring Bank Holiday, last Monday in May
  • Late Summer Holiday, last Monday in August

Example 1

To compute the UK holidays:

#include <stdio.h>
#include <codecogs/units/date/nthweekday.h>
#include <codecogs/units/date/dateymd.h>
#include <codecogs/units/date/month_str.h>
using namespace Units::Date;

int main()
{
  int d,m,y;
  for(int i=2004; i<=2006; i++)
  {
    printf("\nIn %d:",i);
    dateYMD(nthWeekDay(1, Monday, i, May), y,m,d);        // First Monday
    printf("\n   May Day Bank Holiday is on: %2d %s",d,month_str(m));
    
    dateYMD(nthWeekDay(0, Monday, i, May), y,m,d);        // last Monday
    printf("\n   Spring Bank Holiday is on:  %2d %s",d,month_str(m));
    
    dateYMD(nthWeekDay(0, Monday, i, August), y,m,d);     // last Monday
    printf("\n   Late Summer Holiday is on:  %2d %s",d,month_str(m));
  }
  return 0;
}

Output:

In 2004:
May Day Bank Holiday is on:  3 May
Spring Bank Holiday is on:  31 May
Late Summer Holiday is on:  30 August
In 2005:
May Day Bank Holiday is on:  2 May
Spring Bank Holiday is on:  30 May
Late Summer Holiday is on:  29 August
In 2006:
May Day Bank Holiday is on:  1 May
Spring Bank Holiday is on:  29 May
Late Summer Holiday is on:  28 August

Parameters

Nth
identifies which WeekDay from the start of the month to obtain (e.g. the 1st Friday, 3rd Monday). A zero value will return the date of the last WeekDay, with negative values returning earlier weekdays from the end of the month.
WeekDay
is the day of the week required, with its value depending upon the Type (see below).
Year
can be any integer greater than 4800 BC (-4799).
Month
contains the month of the year. This value must be within the range -9 to 14 (inclusive), though value outside the range 1-12 will be divided by by 12, such that the Year incremented by the quotient and the Month set to the remainder.
Type
defines the input form for the WeekDay:
Blank
  • Type=1 : WeekDay contains numbers 1 (Sunday) through 7 (Saturday) - default behaviour of Microsoft cal_Excel.
  • Type=2 : WeekDay contains numbers 1 (Monday) through 7 (Sunday).
  • Type=3 : WeekDay contains numbers 0 (Monday) through 6 (Sunday).
GPL Licence — free for non commercial use. See Licence details.

Interactive Calculator

Nth
WeekDay
Year
Month
Type
Result