StartLongCount = 584285 before calling function MCalendar->Maya()
var $StartLongCount = 584283;
var $LongCount = [
"Baktun" => 13,
"Katun" => 0,
"Tun" => 0,
"Winal" => 0,
"Kin" => 0
];
var $LongKin;
var $Tzolkin = [
"Kin13" => 0,
"Kin20" => 0
];
var $TzolkinNames = [
"AHAU", "IMIX", "IK", "AKBAL", "KAN",
"CHICCHAN", "CIMI", "MANIK", "LAMAT",
"MULUC", "OC", "CHUEN", "EB", "BEN",
"IX", "MEN", "CIB", "CABAN", "ETZNAB",
"CAUAC"
];
var $Haab = [
"Winal" => 0,
"Kin" => 0
];
var $HaabNames = [
"POP", "WO", "SIP", "SOTZ",
"SEK", "XUL", "YAXKIN", "MOL",
"CHEN", "YAX", "SAC", "KEH", "MAK",
"KANKIN", "MUWAN", "PAX", "KAYAB",
"KUMKU", "WAYEB"
];
var $Gregorian = [
"Year" => 2008,
"Month" => 11,
"Day" => 25
];
var $Julian = 0;
function setLongKin()
{
$this->LongKin = $this->LongCount["Baktun"] * 144000
+ $this->LongCount["Katun"] * 7200
+ $this->LongCount["Tun"] * 360
+ $this->LongCount["Winal"] * 20
+ $this->LongCount["Kin"];
return $this->LongKin;
}
function setJulian()
{
$Year = $this->Gregorian["Year"];
$Month = $this->Gregorian["Month"];
$Day = $this->Gregorian["Day"];
if ($Month < 3) {
$Month += 12;
$Year -= 1;
};
$a = floor($Year / 100);
$b = 2 - $a + floor($a / 4);
$j = floor(365.25 * ($Year + 4716)) + floor(30.6001 * ($Month + 1)) + $Day + $b - 1524;
$this->Julian = $j;
return $this->Julian;
}
function Maya()
{
$this->setJulian();
$days = $this->Julian - $this->StartLongCount;
$xdays = $days;
$baktun = floor($xdays / 144000);
$this->LongCount["Baktun"] = $baktun;
$xdays -= $baktun * 144000;
$katun = floor($xdays / 7200);
$this->LongCount["Katun"] = $katun;
$xdays -= $katun * 7200;
$tun = floor($xdays / 360);
$this->LongCount["Tun"] = $tun;
$xdays -= $tun * 360;
$winal = floor($xdays / 20);
$this->LongCount["Winal"] = $winal;
$kin = $xdays - ($winal * 20);
$this->LongCount["Kin"] = $kin;
$xdays = $days - (260 * (floor($days / 260)));
$tzolradical = 4 + $xdays - (13 * (floor(($xdays + 3) / 13)));
$this->Tzolkin["Kin13"] = $tzolradical;
$tzolkin = $xdays - (20 * (floor(($xdays) / 20)));
$this->Tzolkin["Kin20"] = $tzolkin;
$xdays = $days + 348 - (365 * (floor(($days + 348) / 365)));
$haabkin = $xdays - (20 * (floor($xdays / 20)));
$this->Haab["Kin"] = $haabkin;
if ($xdays > 360) {
$this->Haab["Winal"] = 18;
}
$haabwinal = floor($xdays / 20);
$this->Haab["Winal"] = $haabwinal;
$this->setLongKin();
}
}
function wikiplugin_mcalendar_info()
{
return [
'name' => tra('Mayan Calendars'),
'documentation' => 'PluginMCalendarInfo',
'description' => tra('Convert a Gregorian date to a Mayan calendar date'),
'prefs' => ['wikiplugin_mcalendar'],
'iconname' => 'calendar',
'introduced' => 4,
'params' => [
'template' => [
'required' => false,
'name' => tra('Template'),
'since' => '4.0',
'description' => tra('You must use the variable substitution.')
. '
'
. tra('LongCount: ')
. '~np~%baktun%, %katun%, %tun%, %winal%, %kin%~/np~'
. '
'
. tra('Tzolkin: ')
. '~np~%tzolkin13%, %tzolkin20%, %tzolkin20name%~/np~'
. '
'
. tra('Haab: ')
. '~np~%haabkin%, %haabwinal%, %haabwinalname%~/np~'
. '
'
. tra('Misc: ')
. '~np~%longkin%, %julianday%~/np~'
. '
'
. tra('Example: template ')
. '~np~"%baktun%.%katun%.%tun%.%winal%.%kin%, %tzolkin13% %tzolkin20name%, %haabkin% %haabwinalname%"~/np~'
. tr('for %022.05.2009%1 will return 12.19.16.6.11, 8 CHUEN, 9 SIP.', '', '')
. '
'
. tra('Default template: ')
. '~np~%baktun%.%katun%.%tun%.%winal%.%kin% %tzolkin13% %tzolkin20name% %haabkin% %haabwinalname%~/np~',
],
'grdate' => [
'required' => false,
'name' => tra('Gregorian date'),
'description' => tr(
'Gregorian date for convert. Format: %0DD.MM.YYYY%1. Default: Today\'s date',
'',
''
),
'since' => '4.0',
],
],
];
}
function wikiplugin_mcalendar($data, $params)
{
global $tikilib;
extract($params, EXTR_SKIP);
$out = '';
if (! isset($template)) {
$template = '%baktun%.%katun%.%tun%.%winal%.%kin% %tzolkin13% %tzolkin20name% %haabkin% %haabwinalname%';
}
$template = strtolower($template);
$today = $grdate;
// Set default date to Today.
if (! isset($grdate)) {
$today = date('d.m.Y');
}
// If date is not in DD.MM.YYYY format display error message
if (! preg_match('/\d{1,2}\.\d{1,2}\.\d{4}/', $today)) {
$error = "" . $today . tra(" is not a valid date format. should be dd.mm.yyyy") . "";
return $error;
}
$MCal = new MCalendar();
list($MCal->Gregorian["Day"], $MCal->Gregorian["Month"], $MCal->Gregorian["Year"]) = explode(".", $today);
$MCal->Maya();
$vars = ['%baktun%', '%katun%', '%tun%', '%winal%', '%kin%',
'%tzolkin13%', '%tzolkin20%', '%tzolkin20name%',
'%haabkin%', '%haabwinal%', '%haabwinalname%',
'%longkin%', '%julianday%'];
$values = [$MCal->LongCount["Baktun"], $MCal->LongCount["Katun"],
$MCal->LongCount["Tun"], $MCal->LongCount["Winal"], $MCal->LongCount["Kin"],
$MCal->Tzolkin["Kin13"], $MCal->Tzolkin["Kin20"], $MCal->TzolkinNames[$MCal->Tzolkin["Kin20"]],
$MCal->Haab["Kin"], $MCal->Haab["Winal"], $MCal->HaabNames[$MCal->Haab["Winal"]],
$MCal->LongKin, $MCal->Julian];
$out = str_replace($vars, $values, $template);
return $out;
}