Zeller’s Congruence | Find the Day for a Date

14 Mar, 2022
Zeller’s congruence is an algorithm devised by Christian Zeller to calculate the day of the week for any Julian or Gregorian calendar date. It can be considered to be based on the conversion between Julian day and the calendar date. It is an algorithm to find the day of the week for any date. For the Gregorian calendar it is: For the Julian calendar it is: where, 
h is the day of the week (0 = Saturday, 1 = Sunday, 2 = Monday, ..., 6 = Friday)q is the day of the monthm is the month (3 = March, 4 = April, 5 = May, ..., 14 = February)K is the year of the century (year % 100).J is the zero-based century (actually ⌊ year/100 ⌋) For example, the zero-based centuries for 1995 and 2000 are 19 and 20 respectively (to not be confused with the common ordinal century enumeration which indicates 20th for both cases).
h is the day of the week (0 = Saturday, 1 = Sunday, 2 = Monday, ..., 6 = Friday)
q is the day of the month
m is the month (3 = March, 4 = April, 5 = May, ..., 14 = February)
K is the year of the century (year % 100).
J is the zero-based century (actually ⌊ year/100 ⌋) For example, the zero-based centuries for 1995 and 2000 are 19 and 20 respectively (to not be confused with the common ordinal century enumeration which indicates 20th for both cases).
NOTE: In this algorithm January and February are
      counted as months 13 and 14 of the previous
      year.E.g. if it is 2 February 2010, the 
      algorithm counts the date as the second day 
      of the fourteenth month of 2009 (02/14/2009 
      in DD/MM/YYYY format)
For an ISO week date Day-of-Week d (1 = Monday to 7 = Sunday), use  
 d = ((h+5)%7) + 1 
C++
Java
Python3
C#
PHP
Javascript
// C++ program to Find the Day// for a Date#include <cmath>#include <cstring>#include <iostream>using namespace std; int Zellercongruence(int day, int month, int year){    if (month == 1) {        month = 13;        year--;    }    if (month == 2) {        month = 14;        year--;    }    int q = day;    int m = month;    int k = year % 100;    int j = year / 100;    int h        = q + 13 * (m + 1) / 5 + k + k / 4 +                              j / 4 + 5 * j;    h = h % 7;    switch (h) {    case 0:        cout << "Saturday \n";        break;    case 1:        cout << "Sunday \n";        break;    case 2:        cout << "Monday \n";        break;    case 3:        cout << "Tuesday \n";        break;    case 4:        cout << "Wednesday \n";        break;    case 5:        cout << "Thursday \n";        break;    case 6:        cout << "Friday \n";        break;    }    return 0;} // Driver codeint main(){    Zellercongruence(22, 10, 2017); // date (dd/mm/yyyy)    return 0;}
// Java program to  Find the Day// for a Dateimport java.util.*; class GFG{    // Print Day for a Date    static void Zellercongruence(int day, int month,                                 int year)    {        if (month == 1)        {            month = 13;            year--;        }        if (month == 2)        {            month = 14;            year--;        }        int q = day;        int m = month;        int k = year % 100;        int j = year / 100;        int h = q + 13*(m + 1) / 5 + k + k / 4 + j / 4 + 5 * j;        h = h % 7;        switch (h)        {            case 0 : System.out.println("Saturday"); break;            case 1 : System.out.println("Sunday"); break;            case 2 : System.out.println("Monday"); break;            case 3 : System.out.println("Tuesday"); break;            case 4 : System.out.println("Wednesday"); break;            case 5 : System.out.println("Thursday"); break;            case 6 : System.out.println("Friday"); break;        }    }         // Driver code    public static void main(String[] args)    {        Zellercongruence(22, 10, 2017); //date (dd/mm/yyyy)    }} /* This code is contributed by Mr. Somesh Awasthi */
# Python3 program to  Find the Day# for a Date def switch(h) :    return {        0 : "Saturday",        1 : "Sunday",        2 : "Monday",        3 : "Tuesday",        4 : "Wednesday",        5 : "Thursday",        6 : "Friday",    }[h] def Zellercongruence(day, month, year) :    if (month == 1) :        month = 13        year = year - 1     if (month == 2) :        month = 14        year = year - 1    q = day    m = month    k = year % 100;    j = year // 100;    h = q + 13 * (m + 1) // 5 + k + k // 4 + j // 4 + 5 * j    h = h % 7    print(switch (h))               # Driver codeZellercongruence(22, 10, 2017) #date (dd/mm/yyyy) # This code is contributed by Nikita Tiwari
// C# program to  Find the Day// for a Dateusing System; class GFG {         // Print Day for a Date    static void Zellercongruence(int day,                      int month, int year)    {        if (month == 1)        {            month = 13;            year--;        }        if (month == 2)        {            month = 14;            year--;        }        int q = day;        int m = month;        int k = year % 100;        int j = year / 100;        int h = q + 13 * (m + 1) / 5 + k + k / 4                                 + j / 4 + 5 * j;        h = h % 7;        switch (h)        {            case 0 : Console.WriteLine("Saturday");                     break;                                  case 1 : Console.WriteLine("Sunday");                     break;                                  case 2 : Console.WriteLine("Monday");                     break;                                  case 3 : Console.WriteLine("Tuesday");                     break;                                  case 4 : Console.WriteLine("Wednesday");                     break;                                  case 5 : Console.WriteLine("Thursday");                     break;                                  case 6 : Console.WriteLine("Friday");                     break;        }    }         // Driver code    public static void Main()    {                 //date (dd/mm/yyyy)        Zellercongruence(22, 10, 2017);    }} /* This code is contributed by vt_m */
<?php// PHP program to Find the Day// for a Date function Zellercongruence($day, $month, $year){    if ($month == 1)    {        $month = 13;        $year--;    }         if ($month == 2)    {        $month = 14;        $year--;    }             $q = $day;        $m = $month;        $k = $year % 100;        $j = $year / 100;        $h = $q + 13*($m + 1) / 5 + $k +               $k / 4 + $j / 4 + 5 * $j;        $h = $h % 7;    switch ($h)    {        case 1 : echo "Saturday \n";        break;        case 2 : echo "Sunday \n";        break;        case 3 : echo "Monday \n";        break;        case 4 : echo "Tuesday \n";        break;        case 5 : echo "Wednesday \n";        break;        case 6 : echo "Thursday \n";        break;        case 7 : echo "Friday \n";        break;    }} // Driver code//date (dd/mm/yyyy)Zellercongruence(22, 10, 2017); // This code is contributed by ajit.?>
<script>    // Javascript program to Find the Day for a Date         // Print Day for a Date    function Zellercongruence(day, month, year)    {        if (month == 1)        {            month = 13;            year--;        }        if (month == 2)        {            month = 14;            year--;        }        let q = day;        let m = month;        let k = year % 100;        let j = parseInt(year / 100, 10);        let h = q + parseInt(13 * (m + 1) / 5, 10) + k + parseInt(k / 4, 10) + parseInt(j / 4, 10) + 5 * j;        h = h % 7;        switch (h)        {            case 0 :              document.write("Saturday");              break;                                   case 1 :                document.write("Sunday");                break;                                   case 2 :                document.write("Monday");                break;                                   case 3 :                document.write("Tuesday");                break;                                   case 4 :                document.write("Wednesday");                break;                                   case 5 :                document.write("Thursday");                break;                                   case 6 :                document.write("Friday");                break;        }    }         //date (dd/mm/yyyy)      Zellercongruence(22, 10, 2017);     </script>
Output: 
Sunday
This article is contributed by Amartya Ranjan Saikia. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above. 
jit_t
18bhupenderyadav18
decode2207
simmytarika5
date-time-program
Mathematical
Mathematical
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Merge two sorted arrays
Operators in C / C++
Prime Numbers
Minimum number of jumps to reach end
Find minimum number of coins that make a given value
The Knight's tour problem | Backtracking-1
Algorithm to solve Rubik's Cube
Modulo Operator (%) in C/C++ with Examples
Program to find sum of elements in a given array
Merge two sorted arrays with O(1) extra space