Find day of the week for a given date - GeeksforGeeks

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.  
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++
C
Java
Python3
C#
PHP
Javascript
/* A program to find day of a given date */#include <bits/stdc++.h>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 Codeint main(){    int day = dayofweek(30, 8, 2010);    cout << day;     return 0;} // This is code is contributed// by rathbhupendra
/* A program to find day of a given date */#include<stdio.h> 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;}
/*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 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 Codeday = dayofweek(30, 8, 2010)print(day) # This code is contributed by Shreyanshi Arun.
// C# program to find day of a given dateusing 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// PHP program to find// day of a given datefunction dayofweek($d, $m, $y){    static $t = array(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$day = dayofweek(30, 8, 2010);echo $day; // This code is contributed by mits.?>
<script> // Javascript program to find day of a given date function dayofweek(d, m, y){    let 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 Code     let day = dayofweek(30, 8, 2010);    document.write(Math.round(day)); </script>
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_weekThis article is compiled by Dheeraj Jain and reviewed by GeeksforGeeks team. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above 
Mithun Kumar
RishabhJain16
rathbhupendra
code_hunt
mailaniketdey
subhammahato348
date-time-program
Morgan Stanley
Samsung
Mathematical
Morgan Stanley
Samsung
Mathematical
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Modulo Operator (%) in C/C++ with Examples
Merge two sorted arrays
Prime Numbers
Program to find sum of elements in a given array
Operators in C / C++
Euclidean algorithms (Basic and Extended)
Algorithm to solve Rubik's Cube
Write a program to calculate pow(x,n)
Efficient program to print all prime factors of a given number
The Knight's tour problem | Backtracking-1