# Find day of the week for a given date

• Difficulty Level : Expert
• Last Updated : 10 Aug, 2022

Write a function that calculates the day of the week for any particular date in the past or future. A typical application is to calculate the day of the week on which someone was born or some other special event occurred.

Recommended Practice

Following is a simple function suggested by Sakamoto, Lachman, Keith and Craver to calculate day. The following function returns 0 for Sunday, 1 for Monday, etc.

```Understanding the Maths:

14/09/1998
dd=14
mm=09
yyyy=1998 //non-leap year

Step 1: Informations to be remembered.
Magic Number Month array.
For Year: {0,3,3,6,1,4,6,2,5,0,3,5}
DAY array starting from 0-6: {Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday}
Century Year Value: 1600-1699 = 6
1700-1799 = 4
1800-1899 = 2
1900-1999 = 0
2000-2099 = 6..

Step 2: Calculations as per the steps

Last 2 digits of the year:  98
Divide the above by 4:     24
Take the date(dd):      14
Take month value from array: 5 (for September month number 9)
Take century year value:  0  ( 1998 is in the range 1900-1999 thus 0)
-----
Sum:        141

Divide the Sum by 7 and get the remainder: 141 % 7 = 1

Check the Day array starting from index 0: Day = Monday

**If leap year it will be the remainder-1```

## C++

 `/* A program to find day of a given date */``#include ``using` `namespace` `std;` `int` `dayofweek(``int` `d, ``int` `m, ``int` `y)``{``    ``static` `int` `t[] = { 0, 3, 2, 5, 0, 3,``                       ``5, 1, 4, 6, 2, 4 };``    ``y -= m < 3;``    ``return` `( y + y / 4 - y / 100 +``             ``y / 400 + t[m - 1] + d) % 7;``}` `// Driver Code``int` `main()``{``    ``int` `day = dayofweek(30, 8, 2010);``    ``cout << day;` `    ``return` `0;``}` `// This is code is contributed``// by rathbhupendra`

## C

 `/* A program to find day of a given date */``#include` `int` `dayofweek(``int` `d, ``int` `m, ``int` `y)``{``    ``static` `int` `t[] = { 0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4 };``    ``y -= m < 3;``    ``return` `( y + y/4 - y/100 + y/400 + t[m-1] + d) % 7;``}` `/* Driver function to test above function */``int` `main()``{``    ``int` `day = dayofweek(30, 8, 2010);``    ``printf` `(``"%d"``, day);` `    ``return` `0;``}`

## Java

 `/*This code will return the string value and the exact date`` ``* both for leap and non leap years*/``import` `java.util.*;``class` `FindDay {``    ``static` `int` `dd;``    ``static` `int` `mm;``    ``static` `int` `yyyy;``    ``FindDay(``int` `dd, ``int` `mm, ``int` `yyyy)``    ``{``        ``this``.dd = dd;``        ``this``.mm = mm;``        ``this``.yyyy = yyyy;``    ``}``    ``static` `int` `checkLeap(``int` `y)``    ``{``        ``if` `((y % ``4` `== ``0` `&& y % ``100` `!= ``0``) || (y % ``400` `== ``0``))``            ``return` `1``;``        ``else``            ``return` `0``;``    ``}``    ``static` `void` `calculate()``    ``{` `        ``// Checking Leap year. If true then 1 else 0.``        ``int` `flag_for_leap = checkLeap(yyyy);` `        ``/*Declaring and initialising the given informations``         ``* and arrays*/``        ``String day[] = { ``"Sunday"``,    ``"Monday"``,   ``"Tuesday"``,``                         ``"Wednesday"``, ``"Thursday"``, ``"Friday"``,``                         ``"Saturday"` `};``        ``int` `m_no[] = { ``0``, ``3``, ``3``, ``6``, ``1``, ``4``, ``6``, ``2``, ``5``, ``0``, ``3``, ``5` `};` `        ``/*Generalised check to find any Year Value*/``        ``int` `j;``        ``if` `((yyyy / ``100``) % ``2` `== ``0``) {``            ``if` `((yyyy / ``100``) % ``4` `== ``0``)``                ``j = ``6``;``            ``else``                ``j = ``2``;``        ``}``        ``else` `{``            ``if` `(((yyyy / ``100``) - ``1``) % ``4` `== ``0``)``                ``j = ``4``;``            ``else``                ``j = ``0``;``        ``}` `        ``/*THE FINAL FORMULA*/``        ``int` `total = (yyyy % ``100``) + ((yyyy % ``100``) / ``4``) + dd``                    ``+ m_no[mm - ``1``] + j;``        ``if` `(flag_for_leap == ``1``) {``            ``if` `((total % ``7``) > ``0``)``                ``System.out.println(day[(total % ``7``) - ``1``]);``            ``else``                ``System.out.println(day[``6``]);``        ``}``        ``else``            ``System.out.println(day[(total % ``7``)]);``    ``}``    ``public` `static` `void` `main(String[] args)``    ``{``        ``Scanner sc = ``new` `Scanner(System.in);``        ``/*Take input in string format and then convert to``         ``* integer values*/``        ``String date = sc.next();``        ``String[] values = date.split(``"/"``);``        ``new` `FindDay(Integer.parseInt(values[``0``]),``                    ``Integer.parseInt(values[``1``]),``                    ``Integer.parseInt(values[``2``]));``        ``calculate();``    ``}``}``/*Contributed and written by Aniket Dey*/`

## Python3

 `# Python3 program to find day``# of a given date` `def` `dayofweek(d, m, y):``    ``t ``=` `[ ``0``, ``3``, ``2``, ``5``, ``0``, ``3``,``          ``5``, ``1``, ``4``, ``6``, ``2``, ``4` `]``    ``y ``-``=` `m < ``3``    ``return` `(( y ``+` `int``(y ``/` `4``) ``-` `int``(y ``/` `100``)``             ``+` `int``(y ``/` `400``) ``+` `t[m ``-` `1``] ``+` `d) ``%` `7``)` `# Driver Code``day ``=` `dayofweek(``30``, ``8``, ``2010``)``print``(day)` `# This code is contributed by Shreyanshi Arun.`

## C#

 `// C# program to find day of a given date``using` `System;` `class` `GFG {``    ` `    ``static` `int` `dayofweek(``int` `d, ``int` `m, ``int` `y)``    ``{``        ``int` `[]t = { 0, 3, 2, 5, 0, 3, 5,``                            ``1, 4, 6, 2, 4 };``        ``y -= (m < 3) ? 1 : 0;``        ` `        ``return` `( y + y/4 - y/100 + y/400``                         ``+ t[m-1] + d) % 7;``    ``}``    ` `    ``// Driver Program to test above function``    ``public` `static` `void` `Main()``    ``{``        ``int` `day = dayofweek(30, 8, 2010);``        ` `        ``Console.Write(day);``    ``}``}` `// This code is contributed by Sam007.`

## PHP

 ``

## Javascript

 ``

Output : 1 (Monday)

Time Complexity: O(1)

Space Complexity: O(1), since no extra space has been taken.

See this for explanation of the above function.
References:
http://en.wikipedia.org/wiki/Determination_of_the_day_of_the_week