# dayofweek

`function dayofweek( year, month, day ) --> dow`

## Description

Returns the day of the week corresponding to a date. The result is given as an integer from 1(Monday) to 7(Sunday).

## Parameters

year

The year as a number.

month

The month as a number from 1(January) to 12(December).

day

The day as a number from 1 to 31

## Return Values

dow

The weekday as integer ranging from 1 (Monday) to 7 (Sunday).

## Code

```--ZFUNC-dayofweek-v1
local function dayofweek( year, month, day ) --> dow
local century = function( year ) return math.floor( year / 100 ) end

--ZFUNC-isleapyear-v1
local isleapyear = function( year )
if( year % 4 == 0 and year % 100 ~= 0 ) or ( year % 400 == 0 ) then
return true
else
return false
end
end

local month_number_for_month = { 0, 3, 3, 6, 1, 4, 6, 2, 5, 0, 3, 5 }

local day_num = day % 7
local month_num = month_number_for_month[ month ]

local y = year - century( year ) * 100
local year_num = ( y + math.floor( y / 4 ) ) % 7

local century_num = ( 3 - ( century( year ) % 4 ) ) * 2

local leap_num = 0
if ( isleapyear( year ) and ( month < 3 ) ) then leap_num = 6 end

local res = day_num + month_num + year_num + century_num + leap_num - 1
return ( res % 7 ) + 1
end

return dayofweek```

## Examples

```local t = require( "taptest" )
local dayofweek = require( "dayofweek" )

t( dayofweek( 2012, 4, 8 ), 7 ) -- Sunday
t( dayofweek( 1949, 5, 23 ), 1 ) -- Monday
t( dayofweek( 1789, 7, 14 ), 2 ) -- Tuesday
t( dayofweek( 1892, 1, 18 ), 1 ) -- Monday
t( dayofweek( 1989, 11, 9 ), 4 ) -- Thursday

t()```