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