M4BASIC - zeller.m4
Not logged in
divert(-1)
#--------------------------------------------------------------
#
# Implementation of Zeller's Congruence in M4.
#
# October 2017, PvE. GPL License.
#
#--------------------------------------------------------------

# Split function
define(arg,`ifelse($4,1,$1,$4,2,$2,$4,3,$3)')
define(token,`define(`tmp',`translit($1,-,`,')')'`arg(tmp,$2)')

# Get the separate items
define(dd,token(ate,1))
define(mm,token(ate,2))
define(yyyy,token(ate,3))

# Check length of year
define(`yyyy',ifelse(len(yyyy),1,`000yyyy',len(yyyy),2,`00yyyy',len(yyyy),3,`0yyyy',`yyyy'))

# Get age and year nr
define(J,substr(yyyy,0,2))
define(K,substr(yyyy,2,4))

# Calculate adjustment
define(mm,`ifdef(mm,ifelse(eval(mm<3),1,decr(K)eval(mm+12),mm),1)')

# Calculate day
define(day,`eval((dd + ((mm+1)*26)/10 + K + (K/4) + (J/4) + 5*J)%7)')

# Show result
define(result,`ifelse(day,0,Saturday,day,1,Sunday,day,2,Monday,day,3,Tuesday,day,4,Wednesday,day,5,Thursday,day,6,Friday)')

divert(0)dnl
ifdef(`ate',`result',``Usage: m4 -Date=<dd-mm-yyyy> zeller.m4'')

Return to M4BASIC