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: Information 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++
#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;
}
int main()
{
int day = dayofweek(30, 8, 2010);
cout << day;
return 0;
}
|
C
#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;
}
int main()
{
int day = dayofweek(30, 8, 2010);
printf ( "%d" , day);
return 0;
}
|
Java
import java.util.*;
class FindDay {
static int dayofweek( int d, int m, int y)
{
int t[] = { 0 , 3 , 2 , 5 , 0 , 3 , 5 , 1 , 4 , 6 , 2 , 4 };
if (m < 3 )
y--;
return (y + y / 4 - y / 100 + y / 400 + t[m - 1 ]
+ d)
% 7 ;
}
public static void main(String[] args)
{
int day = dayofweek( 30 , 8 , 2010 );
System.out.println(day);
}
}
|
Python3
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 )
day = dayofweek( 30 , 8 , 2010 )
print (day)
|
C#
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;
}
public static void Main()
{
int day = dayofweek(30, 8, 2010);
Console.Write(day);
}
}
|
PHP
<?php
function 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;
}
$day = dayofweek(30, 8, 2010);
echo $day ;
?>
|
Javascript
<script>
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;
}
let day = dayofweek(30, 8, 2010);
document.write(Math.round(day));
</script>
|
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
This article is compiled by Dheeraj Jain and reviewed by neveropen team. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above
Feeling lost in the world of random DSA topics, wasting time without progress? It’s time for a change! Join our DSA course, where we’ll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!