# Scripts:Day of the week

The scripts below calculate the day of the week given a date no earlier than 1900. The calc weekday number script can then be used like this:

``` variable(n)
n := calc weekday number(system year, system month, system day)
switch(n) do(
case(0) \$0="Sunday"
case(1) \$0="Monday"
case(2) \$0="Tuesday"
case(3) \$0="Wednesday"
case(4) \$0="Thursday"
case(5) \$0="Friday"
case(6) \$0="Saturday"
)
show string(0)
```

An .rpg file demonstrating it is here: Weekday Tool

# Scripts

```script, calc weekday number, y, m, d, begin
# Return value is:
#
# 0 = Sunday
# 1 = Monday
# 2 = Tuesday
# 3 = Wednesday
# 4 = Thursday
# 5 = Friday
# 6 = Saturday
#
# This function is only smart enough to handle days starting with 1900AD
variable(dnum)
dnum := 1 # January 1900 began on a Monday
variable(i)
for(i, 1900, y -- 1) do(
dnum += days in year(i)
)
for(i, 1, m -- 1) do(
dnum += days in month(y, i)
)
dnum += d -- 1
exit returning(dnum ,mod, 7)
end

script, days in month, y, m, begin
variable(d)
switch(m) do(
case(1) d := 31
case(2) d := days in february(y)
case(3) d := 31
case(4) d := 30
case(5) d := 31
case(6) d := 30
case(7) d := 31
case(8) d := 31
case(9) d := 30
case(10) d := 31
case(11) d := 30
case(12) d := 31
)
exit returning(d)
end

script, days in february, y, begin
if(is leap year(y)) then(
exit returning(29)
)
exit returning(28)
end

script, days in year, y, begin
if(is leap year(y)) then(
exit returning(366)
)
exit returning(365)
end

script, is leap year, y, begin
variable(leap year)
leap year := false # Common year
if((y ,mod, 4) == 0) then(
leap year := true # Leap year
if(y ,mod, 100 == 0) then(
leap year := false # Exceptional Common Year
if(y ,mod, 400 == 0) then(
leap year := true # Century leap year
)
)
)
exit returning(leap year)
end
```