# 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( "tapered" )
local dayofweek = require( "dayofweek" )

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

t.done()```