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 w3wiki team.
Contact Us