# Find day of the week for a given date

• Difficulty Level : Expert
• Last Updated : 21 Oct, 2021

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.

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.

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

```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[1] = 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)
See this for explanation of the above function.
References:
http://en.wikipedia.org/wiki/Determination_of_the_day_of_the_week

My Personal Notes arrow_drop_up