<?php
$z=new paipan();
echo json_encode($z->fatemaps($xb, $yy, $mm, $dd, $hh, $mt = 0, $ss = 0));
class paipan{
public $zwz = true;
private $synmonth = 29.530588853;
private $MM = array();
public $debug = true;
public $wkd = ['日', '一', '二', '三', '四', '五', '六'];
public $gz = [
'甲子', '乙丑', '丙寅', '丁卯', '戊辰', '己巳', '庚午', '辛未', '壬申', '癸酉',
'甲戌', '乙亥', '丙子', '丁丑', '戊寅', '己卯', '庚辰', '辛巳', '壬午', '癸未',
'甲申', '乙酉', '丙戌', '丁亥', '戊子', '己丑', '庚寅', '辛卯', '壬辰', '癸巳',
'甲午', '乙未', '丙申', '丁酉', '戊戌', '己亥', '庚子', '辛丑', '壬寅', '癸卯',
'甲辰', '乙巳', '丙午', '丁未', '戊申', '己酉', '庚戌', '辛亥', '壬子', '癸丑',
'甲寅', '乙卯', '丙辰', '丁巳', '戊午', '己未', '庚申', '辛酉', '壬戌', '癸亥'
];
public $ctg = ['甲', '乙', '丙', '丁', '戊', '己', '庚', '辛', '壬', '癸'];
public $cdz = ['子', '丑', '寅', '卯', '辰', '巳', '午', '未', '申', '酉', '戌', '亥'];
public $csx = ['鼠', '牛', '虎', '兔', '龍', '蛇', '馬', '羊', '猴', '雞', '狗', '豬'];
public $jq = ['春分', '清明', '穀雨', '立夏', '小滿', '芒種', '夏至', '小暑', '大暑', '立秋', '處暑', '白露', '秋分', '寒露', '霜降', '立冬', '小雪', '大雪', '冬至', '小寒', '大寒', '立春', '雨水', '驚蟄'];
public $dxy = ['正月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '冬月', '腊月'];
public $dxd = ['初一', '初二', '初三', '初四', '初五', '初六', '初七', '初八', '初九', '初十', '十一', '十二', '十三', '十四', '十五', '十六', '十七', '十八', '十九', '廿十', '廿一', '廿二', '廿三', '廿四', '廿五', '廿六', '廿七', '廿八', '廿九', '三十'];
public $dxs = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九'];
public $cwx = ['金', '水', '木', '火', '土'];
public $xb = ['男', '女'];
public $mz = ['乾', '坤'];
public $cyy = ['阳', '阴'];
public $lx = ['命旺', '印重', '煞重', '财旺', '伤官'];
public $wxtg = [2, 2, 3, 3, 4, 4, 0, 0, 1, 1];
public $wxdz = [1, 4, 2, 2, 4, 3, 3, 4, 0, 0, 4, 1];
public $ssq = ['正印', '偏印', '比肩', '劫財', '傷官', '食神', '正財', '偏財', '正官', '偏官'];
public $sss = ['印', '卩', '比', '劫', '伤', '食', '财', '才', '官', '杀'];
public $dgs = [
[2, 3, 1, 0, 9, 8, 7, 6, 5, 4],
[3, 2, 0, 1, 8, 9, 6, 7, 4, 5],
[5, 4, 2, 3, 1, 0, 9, 8, 7, 6],
[4, 5, 3, 2, 0, 1, 8, 9, 6, 7],
[7, 6, 5, 4, 2, 3, 1, 0, 9, 8],
[6, 7, 4, 5, 3, 2, 0, 1, 8, 9],
[9, 8, 7, 6, 5, 4, 2, 3, 1, 0],
[8, 9, 6, 7, 4, 5, 3, 2, 0, 1],
[1, 0, 9, 8, 7, 6, 5, 4, 2, 3],
[0, 1, 8, 9, 6, 7, 4, 5, 3, 2]
];
public $dzs = [
[0, 1, 8, 9, 6, 7, 4, 5, 3, 2],
[6, 7, 4, 5, 3, 2, 0, 1, 8, 9],
[2, 3, 1, 0, 9, 8, 7, 6, 5, 4],
[3, 2, 0, 1, 8, 9, 6, 7, 4, 5],
[7, 6, 5, 4, 2, 3, 1, 0, 9, 8],
[5, 4, 2, 3, 1, 0, 9, 8, 7, 6],
[4, 5, 3, 2, 0, 1, 8, 9, 6, 7],
[6, 7, 4, 5, 3, 2, 0, 1, 8, 9],
[9, 8, 7, 6, 5, 4, 2, 3, 1, 0],
[8, 9, 6, 7, 4, 5, 3, 2, 0, 1],
[7, 6, 5, 4, 2, 3, 1, 0, 9, 8],
[1, 0, 9, 8, 7, 6, 5, 4, 2, 3]
];
public $cxz = ['摩羯', '寶瓶', '雙魚', '白羊', '金牛', '雙子', '巨蟹', '獅子', '室女', '天平', '天蠍', '人馬'];
public $zcg = [
[9, -1, -1],
[5, 9, 7],
[0, 2, 4],
[1, -1, -1],
[4, 1, 9],
[2, 4, 6],
[3, 5, -1],
[5, 1, 3],
[6, 8, 4],
[7, -1, -1],
[4, 7, 3],
[8, 0, -1]
];
public $czs = ["長生(強)", "沐浴(凶)", "冠帶(吉)", "臨官(大吉)", "帝旺(大吉)", "衰(弱)", "病(弱)", "死(凶)", "墓(吉)", "絕(凶)", "胎(平)", "養(平)"];
public $yyss = ['異', '同'];
public $sxss = ['生我', '同我', '我生', '我克', '克我'];
public $cfw = [" 中 ", " 北 ", "北北東", "東北東", " 東 ", "東南東", "南南東", " 南 ", "南南西", "西南西", " 西 ", "西北西", "北北西"];
public $csj = ["旺四季", " 春 ", " 夏 ", " 秋 ", " 冬 "];
public $fwtg = [4, 4, 7, 7, 0, 0, 10, 10, 1, 1];
public $fwdz = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
public $sjtg = [1, 1, 2, 2, 0, 0, 3, 3, 4, 4];
public $sjdz = [1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 1];
private function logs($n, $s=null) {
$m = array();
$m[0] = "超出計算能力";
$m[1] = "適用於西元-1000年至西元3000年,超出此範圍誤差較大";
$m[2] = "对应的干支不存在";
$m[3] = "干支非六十甲子";
$m[4] = "日期超出範圍";
$m[5] = "日期錯誤";
$m[6] = "月份錯誤";
$m[7] = "此年非閏年";
$m[8] = "此月非閏月";
$m[9] = "不存在的时间";
$m[10] = "参数非整数字符串";
$m[11] = "参数非整数类型";
$m[12] = "参数非浮点类型";
$m[13] = "月份超出範圍";
$m[14] = "此年無閏月";
$m[15] = "参数非整数";
$m[16] = "参数非数字";
if ($this->debug) {
$ss = $m[$n] ? $m[$n] : $n;
$ss .= ($s === null) ? '' : (":" . $s);
echo $ss;
}
return false;
}
public function Jdays($yy, $mm, $dd, $hh, $mt = 0, $ss = 0) {
$yy = floatval($yy);
$mm = floatval($mm);
$dd = floatval($dd);
$hh = floatval($hh);
$mt = floatval($mt);
$ss = floatval($ss);
if ($yy < -7000 || $yy > 7000) {
$this->logs(0);
return false;
}
$yp = $yy + floor(($mm - 3) / 10);
if (($yy > 1582) || ($yy == 1582 && $mm > 10) || ($yy == 1582 && $mm == 10 && $dd >= 15)) {
$init = 1721119.5;
$jdy = floor($yp * 365.25) - floor($yp / 100) + floor($yp / 400);
} else {
if (($yy < 1582) || ($yy == 1582 && $mm < 10) || ($yy == 1582 && $mm == 10 && $dd <= 4)) {
$init = 1721117.5;
$jdy = floor($yp * 365.25);
} else {
$this->logs(9);
return false;
}
}
$mp = floor($mm + 9) % 12;
$jdm = $mp * 30 + floor(($mp + 1) * 34 / 57);
$jdd = $dd - 1;
$hh = $hh + (($ss / 60) + $mt) / 60;
$jdh = $hh / 24;
$jd = $jdy + $jdm + $jdd + $jdh + $init;
return $jd;
}
public function Jtime($jd) {
$jd = floatval($jd);
if ($jd >= 2299160.5) {
$y4h = 146097;
$init = 1721119.5;
} else {
$y4h = 146100;
$init = 1721117.5;
}
$jdr = floor($jd - $init);
$yh = $y4h / 4;
$cen = floor(($jdr + 0.75) / $yh);
$d = floor($jdr + 0.75 - $cen * $yh);
$ywl = 1461 / 4;
$jy = floor(($d + 0.75) / $ywl);
$d = floor($d + 0.75 - $ywl * $jy + 1);
$ml = 153 / 5;
$mp = floor(($d - 0.5) / $ml);
$d = floor(($d - 0.5) - 30.6 * $mp + 1);
$y = (100 * $cen) + $jy;
$m = ($mp + 2) % 12 + 1;
if ($m < 3) {
$y = $y + 1;
}
$sd = floor(($jd + 0.5 - floor($jd + 0.5)) * 24 * 60 * 60 + 0.00005);
$mt = floor($sd / 60);
$ss = $sd % 60;
$hh = floor($mt / 60);
$mmt = $mt % 60;
$yy = floor($y);
$mm = floor($m);
$dd = floor($d);
return array($yy, $mm, $dd, $hh, $mmt, $ss);
}
public function ValidDate($yy, $mm, $dd) {
$vd = true;
if ($mm <= 0 || $mm > 12) {
$this->logs(13);
$vd = false;
} else {
$ndf1 = -($yy % 4 == 0);
$ndf2 = (($yy % 400 == 0) - ($yy % 100 == 0)) && ($yy > 1582);
$ndf = $ndf1 + $ndf2;
$dom = 30 + ((abs($mm - 7.5) + 0.5) % 2) - ($mm == 2) * (2 + $ndf);
if ($dd <= 0 || $dd > $dom) {
if ($ndf == 0 && $mm == 2 && $dd == 29) {
$this->logs(14);
} else {
$this->logs(4);
}
$vd = false;
}
}
if ($yy == 1582 && $mm == 10 && $dd >= 5 && $dd < 15) {
$this->logs(9);
$vd = false;
}
return $vd;
}
private function VE($yy) {
$yx = intval($yy);
if ($yx >= 1000 && $yx <= 8001) {
$m = ($yx - 2000) / 1000;
$jdve = 2451623.80984 + 365242.37404 * $m + 0.05169 * $m * $m - 0.00411 * $m * $m * $m - 0.00057 * $m * $m * $m * $m;
} else {
if ($yx >= -8000 && $yx < 1000) {
$m = $yx / 1000;
$jdve = 1721139.29189 + 365242.1374 * $m + 0.06134 * $m * $m + 0.00111 * $m * $m * $m - 0.00071 * $m * $m * $m * $m;
} else {
$this->logs(0);
return false;
}
}
return $jdve;
}
private function MeanJQJD($yy, $ini, $num) {
$yy = intval($yy);
$ini = intval($ini);
$num = intval($num);
$jdez = array();
$jdve = $this->VE($yy);
$ty = $this->VE($yy + 1) - $jdve;
$ath = 2 * M_PI / 24;
$tx = ($jdve - 2451545) / 365250;
$e = 0.0167086342 - 0.0004203654 * $tx - 0.0000126734 * $tx * $tx + 0.0000001444 * $tx * $tx * $tx - 0.0000000002 * $tx * $tx * $tx * $tx + 0.0000000003 * $tx * $tx * $tx * $tx * $tx;
$tt = $yy / 1000;
$vp = 111.25586939 - 17.0119934518333 * $tt - 0.044091890166673 * $tt * $tt - 4.37356166661345E-04 * $tt * $tt * $tt + 8.16716666602386E-06 * $tt * $tt * $tt * $tt;
$rvp = $vp * 2 * M_PI / 360;
$peri = array();
for ($i = 1; $i <= ($ini + $num); $i++) {
$flag = 0;
$th = $ath * ($i - 1) + $rvp;
if ($th > M_PI && $th <= 3 * M_PI) {
$th = 2 * M_PI - $th;
$flag = 1;
}
if ($th > 3 * M_PI) {
$th = 4 * M_PI - $th;
$flag = 2;
}
$f1 = 2 * atan((sqrt((1 - $e) / (1 + $e)) * tan($th / 2)));
$f2 = ($e * sqrt(1 - $e * $e) * sin($th)) / (1 + $e * cos($th));
$f = ($f1 - $f2) * $ty / 2 / M_PI;
if ($flag == 1) {
$f = $ty - $f;
}
if ($flag == 2) {
$f = 2 * $ty - $f;
}
$peri[$i] = $f;
}
for ($i = max(1, $ini); $i <= ($ini + $num); $i++) {
$jdez[$i] = $jdve + $peri[$i] - $peri[1];
}
return $jdez;
}
private function Perturbation($jdez) {
$jdez = floatval($jdez);
$ptsa = [485, 203, 199, 182, 156, 136, 77, 74, 70, 58, 52, 50, 45, 44, 29, 18, 17, 16, 14, 12, 12, 12, 9, 8];
$ptsb = [324.96, 337.23, 342.08, 27.85, 73.14, 171.52, 222.54, 296.72, 243.58, 119.81, 297.17, 21.02, 247.54, 325.15, 60.93, 155.12, 288.79, 198.04, 199.76, 95.39, 287.11, 320.81, 227.73, 15.45];
$ptsc = [1934.136, 32964.467, 20.186, 445267.112, 45036.886, 22518.443, 65928.934, 3034.906, 9037.513, 33718.147, 150.678, 2281.226, 29929.562, 31555.956, 4443.417, 67555.328, 4562.452, 62894.029, 31436.921, 14577.848, 31931.756, 34777.259, 1222.114, 16859.074];
$t = ($jdez - 2451545) / 36525;
$s = 0;
for ($k = 0; $k <= 23; $k++) {
$s = $s + $ptsa[$k] * cos($ptsb[$k] * 2 * M_PI / 360 + $ptsc[$k] * 2 * M_PI / 360 * $t);
}
$w = 35999.373 * $t - 2.47;
$l = 1 + 0.0334 * cos($w * 2 * M_PI / 360) + 0.0007 * cos(2 * $w * 2 * M_PI / 360);
$ptb = 0.00001 * $s / $l;
return $ptb;
}
private function DeltaT($yy, $mm) {
$yy = intval($yy);
$mm = intval($mm);
$y = $yy + ($mm - 0.5) / 12;
if ($y <= -500) {
$u = ($y - 1820) / 100;
$dt = (-20 + 32 * $u * $u);
} else {
if ($y < 500) {
$u = $y / 100;
$dt = (10583.6 - 1014.41 * $u + 33.78311 * $u * $u - 5.952053 * $u * $u * $u - 0.1798452 * $u * $u * $u * $u + 0.022174192 * $u * $u * $u * $u * $u + 0.0090316521 * $u * $u * $u * $u * $u * $u);
} else {
if ($y < 1600) {
$u = ($y - 1000) / 100;
$dt = (1574.2 - 556.01 * $u + 71.23472 * $u * $u + 0.319781 * $u * $u * $u - 0.8503463 * $u * $u * $u * $u - 0.005050998 * $u * $u * $u * $u * $u + 0.0083572073 * $u * $u * $u * $u * $u * $u);
} else {
if ($y < 1700) {
$t = $y - 1600;
$dt = (120 - 0.9808 * $t - 0.01532 * $t * $t + $t * $t * $t / 7129);
} else {
if ($y < 1800) {
$t = $y - 1700;
$dt = (8.83 + 0.1603 * $t - 0.0059285 * $t * $t + 0.00013336 * $t * $t * $t - $t * $t * $t * $t / 1174000);
} else {
if ($y < 1860) {
$t = $y - 1800;
$dt = (13.72 - 0.332447 * $t + 0.0068612 * $t * $t + 0.0041116 * $t * $t * $t - 0.00037436 * $t * $t * $t * $t + 0.0000121272 * $t * $t * $t * $t * $t - 0.0000001699 * $t * $t * $t * $t * $t * $t + 0.000000000875 * $t * $t * $t * $t * $t * $t * $t);
} else {
if ($y < 1900) {
$t = $y - 1860;
$dt = (7.62 + 0.5737 * $t - 0.251754 * $t * $t + 0.01680668 * $t * $t * $t - 0.0004473624 * $t * $t * $t * $t + $t * $t * $t * $t * $t / 233174);
} else {
if ($y < 1920) {
$t = $y - 1900;
$dt = (-2.79 + 1.494119 * $t - 0.0598939 * $t * $t + 0.0061966 * $t * $t * $t - 0.000197 * $t * $t * $t * $t);
} else {
if ($y < 1941) {
$t = $y - 1920;
$dt = (21.2 + 0.84493 * $t - 0.0761 * $t * $t + 0.0020936 * $t * $t * $t);
} else {
if ($y < 1961) {
$t = $y - 1950;
$dt = (29.07 + 0.407 * $t - $t * $t / 233 + $t * $t * $t / 2547);
} else {
if ($y < 1986) {
$t = $y - 1975;
$dt = (45.45 + 1.067 * $t - $t * $t / 260 - $t * $t * $t / 718);
} else {
if ($y < 2005) {
$t = $y - 2000;
$dt = (63.86 + 0.3345 * $t - 0.060374 * $t * $t + 0.0017275 * $t * $t * $t + 0.000651814 * $t * $t * $t * $t + 0.00002373599 * $t * $t * $t * $t * $t);
} else {
if ($y < 2050) {
$t = $y - 2000;
$dt = (62.92 + 0.32217 * $t + 0.005589 * $t * $t);
} else {
if ($y < 2150) {
$u = ($y - 1820) / 100;
$dt = (-20 + 32 * $u * $u - 0.5628 * (2150 - $y));
} else {
$u = ($y - 1820) / 100;
$dt = (-20 + 32 * $u * $u);
}
}
}
}
}
}
}
}
}
}
}
}
}
}
if ($y < 1955 || $y >= 2005) {
$dt = $dt - (0.000012932 * ($y - 1955) * ($y - 1955));
}
$DeltaT = $dt / 60;
return $DeltaT;
}
public function GetAdjustedJQ($yy, $ini, $num) {
$yy = intval($yy);
$ini = intval($ini);
$num = intval($num);
$jdez = array();
$jdjq = array();
if (! is_array($this->MM['GetAdjustedJQ'])) {
$this->MM['GetAdjustedJQ'] = array();
}
if (! is_array($this->MM['GetAdjustedJQ'][$yy])) {
$jdez = $this->MeanJQJD($yy, 0, 26);
for ($i = 1; $i <= 26; $i++) {
$ptb = $this->Perturbation($jdez[$i]);
$dt = $this->DeltaT($yy, floor($i / 2) + 3);
$jdez[$i] = $jdez[$i] + $ptb - $dt / 60 / 24;
$jdez[$i] = $jdez[$i] + 1 / 3;
}
$this->MM['GetAdjustedJQ'][$yy] = $jdez;
}
for ($i = $ini + 1; $i <= ($ini + $num); $i++) {
$jdjq[$i] = $this->MM['GetAdjustedJQ'][$yy][$i];
}
return $jdjq;
}
private function GetZQsinceWinterSolstice($yy) {
$yy = intval($yy);
$jdzq = array();
$dj = array();
$dj = $this->GetAdjustedJQ($yy - 1, 18, 5);
$jdzq[0] = $dj[19];
$jdzq[1] = $dj[21];
$jdzq[2] = $dj[23];
$dj = $this->GetAdjustedJQ($yy, 0, 26);
for ($i = 1; $i <= 13; $i++) {
$jdzq[$i + 2] = $dj[2 * $i - 1];
}
return $jdzq;
}
private function GetPureJQsinceSpring($yy) {
$yy = intval($yy);
$jdpjq = array();
$sjdjq = array();
$yea = $yy - 1;
$sjdjq = $this->GetAdjustedJQ($yea, 21, 3);
$jdpjq[0] = $sjdjq[22];
$jdpjq[1] = $sjdjq[24];
$yea = $yy;
$sjdjq = $this->GetAdjustedJQ($yea, 0, 26);
for ($i = 1; $i <= 13; $i++) {
$jdpjq[$i + 1] = $sjdjq[2 * $i];
}
return $jdpjq;
}
private function MeanNewMoon($jd) {
$jd = floatval($jd);
$k = floor(($jd - 2451550.09765) / $this->synmonth);
$jdt = 2451550.09765 + $k * $this->synmonth;
$t = ($jdt - 2451545) / 36525;
$thejd = $jdt + 0.0001337 * $t * $t - 0.00000015 * $t * $t * $t + 0.00000000073 * $t * $t * $t * $t;
return $k;
}
private function MeanNewMoonDay($jd) {
$jd = floatval($jd);
$k = floor(($jd - 2451550.09765) / $this->synmonth);
$jdt = 2451550.09765 + $k * $this->synmonth;
$t = ($jdt - 2451545) / 36525;
$thejd = $jdt + 0.0001337 * $t * $t - 0.00000015 * $t * $t * $t + 0.00000000073 * $t * $t * $t * $t;
return $thejd;
}
private function TrueNewMoon($k) {
$k = intval($k);
$jdt = 2451550.09765 + $k * $this->synmonth;
$t = ($jdt - 2451545) / 36525;
$t2 = $t * $t;
$t3 = $t2 * $t;
$t4 = $t3 * $t;
$pt = $jdt + 0.0001337 * $t2 - 0.00000015 * $t3 + 0.00000000073 * $t4;
$m = 2.5534 + 29.10535669 * $k - 0.0000218 * $t2 - 0.00000011 * $t3;
$mprime = 201.5643 + 385.81693528 * $k + 0.0107438 * $t2 + 0.00001239 * $t3 - 0.000000058 * $t4;
$f = 160.7108 + 390.67050274 * $k - 0.0016341 * $t2 - 0.00000227 * $t3 + 0.000000011 * $t4;
$omega = 124.7746 - 1.5637558 * $k + 0.0020691 * $t2 + 0.00000215 * $t3;
$es = 1 - 0.002516 * $t - 0.0000074 * $t2;
$apt1 = -0.4072 * sin((M_PI / 180) * $mprime);
$apt1 += 0.17241 * $es * sin((M_PI / 180) * $m);
$apt1 += 0.01608 * sin((M_PI / 180) * 2 * $mprime);
$apt1 += 0.01039 * sin((M_PI / 180) * 2 * $f);
$apt1 += 0.00739 * $es * sin((M_PI / 180) * ($mprime - $m));
$apt1 -= 0.00514 * $es * sin((M_PI / 180) * ($mprime + $m));
$apt1 += 0.00208 * $es * $es * sin((M_PI / 180) * (2 * $m));
$apt1 -= 0.00111 * sin((M_PI / 180) * ($mprime - 2 * $f));
$apt1 -= 0.00057 * sin((M_PI / 180) * ($mprime + 2 * $f));
$apt1 += 0.00056 * $es * sin((M_PI / 180) * (2 * $mprime + $m));
$apt1 -= 0.00042 * sin((M_PI / 180) * 3 * $mprime);
$apt1 += 0.00042 * $es * sin((M_PI / 180) * ($m + 2 * $f));
$apt1 += 0.00038 * $es * sin((M_PI / 180) * ($m - 2 * $f));
$apt1 -= 0.00024 * $es * sin((M_PI / 180) * (2 * $mprime - $m));
$apt1 -= 0.00017 * sin((M_PI / 180) * $omega);
$apt1 -= 0.00007 * sin((M_PI / 180) * ($mprime + 2 * $m));
$apt1 += 0.00004 * sin((M_PI / 180) * (2 * $mprime - 2 * $f));
$apt1 += 0.00004 * sin((M_PI / 180) * (3 * $m));
$apt1 += 0.00003 * sin((M_PI / 180) * ($mprime + $m - 2 * $f));
$apt1 += 0.00003 * sin((M_PI / 180) * (2 * $mprime + 2 * $f));
$apt1 -= 0.00003 * sin((M_PI / 180) * ($mprime + $m + 2 * $f));
$apt1 += 0.00003 * sin((M_PI / 180) * ($mprime - $m + 2 * $f));
$apt1 -= 0.00002 * sin((M_PI / 180) * ($mprime - $m - 2 * $f));
$apt1 -= 0.00002 * sin((M_PI / 180) * (3 * $mprime + $m));
$apt1 += 0.00002 * sin((M_PI / 180) * (4 * $mprime));
$apt2 = 0.000325 * sin((M_PI / 180) * (299.77 + 0.107408 * $k - 0.009173 * $t2));
$apt2 += 0.000165 * sin((M_PI / 180) * (251.88 + 0.016321 * $k));
$apt2 += 0.000164 * sin((M_PI / 180) * (251.83 + 26.651886 * $k));
$apt2 += 0.000126 * sin((M_PI / 180) * (349.42 + 36.412478 * $k));
$apt2 += 0.00011 * sin((M_PI / 180) * (84.66 + 18.206239 * $k));
$apt2 += 0.000062 * sin((M_PI / 180) * (141.74 + 53.303771 * $k));
$apt2 += 0.00006 * sin((M_PI / 180) * (207.14 + 2.453732 * $k));
$apt2 += 0.000056 * sin((M_PI / 180) * (154.84 + 7.30686 * $k));
$apt2 += 0.000047 * sin((M_PI / 180) * (34.52 + 27.261239 * $k));
$apt2 += 0.000042 * sin((M_PI / 180) * (207.19 + 0.121824 * $k));
$apt2 += 0.00004 * sin((M_PI / 180) * (291.34 + 1.844379 * $k));
$apt2 += 0.000037 * sin((M_PI / 180) * (161.72 + 24.198154 * $k));
$apt2 += 0.000035 * sin((M_PI / 180) * (239.56 + 25.513099 * $k));
$apt2 += 0.000023 * sin((M_PI / 180) * (331.55 + 3.592518 * $k));
$tnm = $pt + $apt1 + $apt2;
return $tnm;
}
private function GetSMsinceWinterSolstice($yy) {
$yy = intval($yy);
$dj = $this->GetAdjustedJQ($yy - 1, 18, 5);
$jdws = $dj[19];
$jdnm = array();
$spcjd = $this->Jdays($yy - 1, 11, 0, 0);
$kn = $this->MeanNewMoon($spcjd);
for ($i = 0; $i <= 19; $i++) {
$k = $kn + $i;
$mjd = $thejd + $this->synmonth * $i;
$tjd[$i] = $this->TrueNewMoon($k) + 1 / 3;
$tjd[$i] = $tjd[$i] - $this->DeltaT($yy, $i - 1) / 1440;
}
for ($j = 0; $j <= 18; $j++) {
if (floor($tjd[$j] + 0.5) > floor($jdws + 0.5)) {
break;
}
}
$jj = $j;
for ($k = 0; $k <= 15; $k++) {
$jdnm[$k] = $tjd[$jj - 1 + $k];
}
return $jdnm;
}
private function GetZQandSMandLunarMonthCode($yy) {
$yy = intval($yy);
$mc = array();
$jdzq = $this->GetZQsinceWinterSolstice($yy);
$jdnm = $this->GetSMsinceWinterSolstice($yy);
$yz = 0;
$mc[0] = 0;
if (floor($jdzq[12] + 0.5) >= floor($jdnm[13] + 0.5)) {
for ($i = 1; $i <= 14; $i++) {
if (floor(($jdnm[$i] + 0.5) > floor($jdzq[$i - 1 - $yz] + 0.5) && floor($jdnm[$i + 1] + 0.5) <= floor($jdzq[$i - $yz] + 0.5))) {
$mc[$i] = $i - 0.5;
$yz = 1;
} else {
$mc[$i] = $i - $yz;
}
}
} else {
for ($i = 1; $i <= 12; $i++) {
$mc[$i] = $i;
}
for ($i = 13; $i <= 14; $i++) {
if (floor(($jdnm[$i] + 0.5) > floor($jdzq[$i - 1 - $yz] + 0.5) && floor($jdnm[$i + 1] + 0.5) <= floor($jdzq[$i - $yz] + 0.5))) {
$mc[$i] = $i - 0.5;
$yz = 1;
} else {
$mc[$i] = $i - $yz;
}
}
}
return $mc;
}
public function Lunar2Solar($yy, $mm, $dd, $ry) {
$yy = intval($yy);
$mm = intval($mm);
$dd = intval($dd);
$ry = boolval($ry);
if ($yy < -7000 || $yy > 7000) {
$this->logs(0);
return false;
}
if ($yy < -1000 || $yy > 3000) {
$this->logs(1);
return false;
}
$sjd = $this->GetSMsinceWinterSolstice($yy);
$mc = $this->GetZQandSMandLunarMonthCode($yy);
$runyue = 0;
for ($j = 1; $j <= 14; $j++) {
if ($mc[$j] - floor($mc[$j]) > 0) {
$runyue = floor($mc[$j] + 0.5);
break;
}
}
$mx = $mm + 2;
for ($i = 0; $i <= 14; $i++) {
$nofd[$i] = floor($sjd[$i + 1] + 0.5) - floor($sjd[$i] + 0.5);
}
$er = 0;
if ($mx >= 3 && $mx <= 14) {
if ($dd >= 1 && $dd <= 30) {
if ($ry == true) {
if ($runyue < 3) {
$er = 1;
$this->logs(7);
} else {
if ($runyue != $mx) {
$er = 1;
$this->logs(8);
} else {
if ($dd <= $nofd[$mx]) {
$jdx = $sjd[$mx] + $dd - 1;
} else {
$er = 1;
$this->logs(4);
}
}
}
} else {
if ($runyue == 0) {
if ($dd <= $nofd[$mx - 1]) {
$jdx = $sjd[$mx - 1] + $dd - 1;
} else {
$er = 1;
$this->logs(4);
}
} else {
if ($dd <= $nofd[$mx + ($mx > $runyue) - 1]) {
$jdx = $sjd[$mx + ($mx > $runyue) - 1] + $dd - 1;
} else {
$er = 1;
$this->logs(4);
}
}
}
if ($er == 0) {
}
} else {
$er = 1;
$this->logs(5);
}
} else {
$er = 1;
$this->logs(6);
}
return $er ? false : array_slice($this->Jtime($jdx), 0, 3);
}
public function Solar2Lunar($yy, $mm, $dd) {
$yy = intval($yy);
$mm = intval($mm);
$dd = intval($dd);
$flag = 0;
if ($yy < -7000 || $yy > 7000) {
$this->logs(0);
return false;
}
if ($yy < -1000 || $yy > 3000) {
$this->logs(1);
return false;
}
if ($this->ValidDate($yy, $mm, $dd) === false) {
return false;
}
$sjd = $this->GetSMsinceWinterSolstice($yy);
$mc = $this->GetZQandSMandLunarMonthCode($yy);
$jdx = $this->Jdays($yy, $mm, $dd, 12);
if (floor($jdx) < floor($sjd[0] + 0.5)) {
$flag = 1;
$sjd = $this->GetSMsinceWinterSolstice($yy - 1);
$mc = $this->GetZQandSMandLunarMonthCode($yy - 1);
}
for ($i = 0; $i <= 14; $i++) {
if (floor($jdx) >= floor($sjd[$i] + 0.5) && floor($jdx) < floor($sjd[$i + 1] + 0.5)) {
$mi = $i;
break;
}
}
$dz = floor($jdx) - floor($sjd[$mi] + 0.5) + 1;
if ($mc[$mi] < 2 || $flag == 1) {
$yi = $yy - 1;
} else {
$yi = $yy;
}
if (($mc[$mi] - floor($mc[$mi])) * 2 + 1 == 1) {
$ry = false;
} else {
$ry = true;
}
$mis = (floor($mc[$mi] + 10) % 12) + 1;
return array($yi, $mis, $dz, $ry);
}
public function GetWeek($yy, $mm, $dd) {
$yy = intval($yy);
$mm = intval($mm);
$dd = intval($dd);
$spcjd = $this->Jdays($yy, $mm, $dd, 12, 0, 0);
if ($spcjd === false) {
return false;
}
return (((floor($spcjd + 1) % 7)) + 7) % 7;
}
public function GetSolarDays($yy, $mm){
$yy = intval($yy);
$mm = intval($mm);
if ($mm < 1 || $mm > 12) {
$this->logs(13);
return 0;
}
if ($yy == 1582 && $mm == 10) {
return 21;
}
$ndf1 = -($yy % 4 == 0);
$ndf2 = (($yy % 400 == 0) - ($yy % 100 == 0)) && ($yy > 1582);
$ndf = $ndf1 + $ndf2;
return 30 + ((abs($mm - 7.5) + 0.5) % 2) - ($mm == 2) * (2 + $ndf);
}
public function GetLunarDays($yy, $mm, $ry){
$yy = intval($yy);
$mm = intval($mm);
$ry = boolval($ry);
if ($yy < -7000 || $yy > 7000) {
$this->logs(0);
return false;
}
if ($yy < -1000 || $yy > 3000) {
$this->logs(1);
return false;
}
$sjd = $this->GetSMsinceWinterSolstice($yy);
$mc = $this->GetZQandSMandLunarMonthCode($yy);
$runyue = 0;
for ($j = 1; $j <= 14; $j++) {
if ($mc[$j] - floor($mc[$j]) > 0) {
$runyue = floor($mc[$j] + 0.5);
break;
}
}
$mx = $mm + 2;
for ($i = 0; $i <= 14; $i++) {
$nofd[$i] = floor($sjd[$i + 1] + 0.5) - floor($sjd[$i] + 0.5);
}
$er = 0;
if ($mx >= 3 && $mx <= 14) {
if ($ry == true) {
if ($runyue < 3) {
$er = 1;
$this->logs(7);
} else {
if ($runyue != $mx) {
$er = 1;
$this->logs(8);
} else {
$dd = $nofd[$mx];
}
}
} else {
if ($runyue == 0) {
$dd = $nofd[$mx - 1];
} else {
$dd = $nofd[$mx + ($mx > $runyue) - 1];
}
}
} else {
$er = 1;
$this->logs(6);
}
return $er ? false : $dd;
}
public function GetRunyue($yy){
$yy = intval($yy);
$mc = $this->GetZQandSMandLunarMonthCode($yy);
$runyue = 0;
for ($j = 1; $j <= 14; $j++) {
if ($mc[$j] - floor($mc[$j]) > 0) {
$runyue = floor($mc[$j] + 0.5);
break;
}
}
return max(0, $runyue-2);
}
public function GetXZ($yy, $mm, $dd, $hh, $mt = 0, $ss = 0) {
$yy = intval($yy);
$mm = intval($mm);
$dd = intval($dd);
$hh = intval($hh);
$mt = intval($mt);
$ss = intval($ss);
if ($this->ValidDate($yy, $mm, $dd) === false) {
return false;
}
$spcjd = $this->Jdays($yy, $mm, $dd, $hh, $mt, $ss);
if ($spcjd === false) {
return false;
}
$zr = $this->GetZQsinceWinterSolstice($yy);
if ($spcjd < $zr[0]) {
$zr = $this->GetZQsinceWinterSolstice($yy - 1);
}
for ($i = 0; $i <= 13; $i++) {
if ($spcjd < $zr[$i]) {
$xz = ($i + 12 - 1) % 12;
break;
}
}
return $xz;
}
public function Get24JQ($yy) {
$yy = intval($yy);
$yea = $yy - 1;
$sjdjq = $this->GetAdjustedJQ($yea, 21, 3);
$jdpjq[0] = $sjdjq[22];
$jdpjq[1] = $sjdjq[23];
$jdpjq[2] = $sjdjq[24];
$yea = $yy;
$sjdjq = $this->GetAdjustedJQ($yea, 0, 21);
for ($i = 1; $i <= 21; $i++) {
$jdpjq[$i + 2] = $sjdjq[$i];
}
return $jdpjq;
}
public function GetGZ($yy, $mm, $dd, $hh, $mt = 0, $ss = 0) {
$yy = floatval($yy);
$mm = floatval($mm);
$dd = floatval($dd);
$hh = floatval($hh);
$mt = floatval($mt);
$ss = floatval($ss);
if($mt + $ss == 0){
$ss = 10;
}
if ($this->ValidDate($yy, $mm, $dd) === false) {
return false;
}
$spcjd = $this->Jdays($yy, $mm, $dd, $hh, $mt, $ss);
if ($spcjd === false) {
return false;
}
$jr = array();
$ty = $yy;
$jr = $this->GetPureJQsinceSpring($yy);
if ($spcjd < $jr[0]) {
$ty = $yy - 1;
$jr = $this->GetPureJQsinceSpring($ty);
}
$tg = array();
$dz = array();
$ygz = (($ty + 4712 + 24) % 60 + 60) % 60;
$tg[0] = $ygz % 10;
$dz[0] = $ygz % 12;
for ($j = 0; $j <= 13; $j++) {
if ($jr[$j] >= $spcjd) {
$tm = $j - 1;
break;
}
}
$tmm = (($ty + 4712) * 12 + ($tm) + 60) % 60;
$mgz = ($tmm + 50) % 60;
$tg[1] = $mgz % 10;
$dz[1] = $mgz % 12;
$jda = $spcjd + 0.5;
$thes = (($jda - floor($jda)) * 86400) + 3600;
$dayjd = floor($jda) + $thes / 86400;
$dgz = (floor($dayjd + 49) % 60 + 60) % 60;
$tg[2] = $dgz % 10;
$dz[2] = $dgz % 12;
if ($this->zwz && ($hh >= 23)) {
$tg[2] = ($tg[2] + 10 - 1) % 10;
$dz[2] = ($dz[2] + 12 - 1) % 12;
}
$dh = $dayjd * 12;
$hgz = (floor($dh + 48) % 60 + 60) % 60;
$tg[3] = $hgz % 10;
$dz[3] = $hgz % 12;
return array($tg, $dz);
}
public function MGZ($ygz) {
$mgz = array();
$nv = 2 + 12 * ($ygz % 10);
for ($i = 0; $i <= 11; $i++) {
$pv = ($i + $nv) % 60;
$mgz[$pv] = $this->gz[$pv];
}
return $mgz;
}
public function HGZ($dgz) {
$hgz = array();
$nv = 12 * ($dgz % 10);
for ($i = 0; $i <= 11; $i++) {
$pv = ($i + $nv) % 60;
$hgz[$pv] = $this->gz[$pv];
}
return $hgz;
}
public function GZ($tg, $dz){
$tg = intval($tg);
$dz = intval($dz);
if($tg < 0 || $tg > 59){
$this->logs(3,11);
return false;
}
if($dz < 0 || $dz > 59){
$this->logs(3,12);
return false;
}
if(($tg % 2) != ($dz % 2)){
$this->logs(3,13);
return false;
}
return ((10 + $tg - $dz) % 10) / 2 * 12 + $dz;
}
public function gz2gl($ygz, $mgz, $dgz, $hgz, $yeai, $mx) {
$ygz = intval($ygz);
$mgz = intval($mgz);
$dgz = intval($dgz);
$hgz = intval($hgz);
$yeai = intval($yeai);
$mx = intval($mx);
if ($ygz < 0 || $ygz >= 60) {
$this->logs(3,0);
return false;
}
if ($mgz < 0 || $mgz >= 60) {
$this->logs(3,1);
return false;
}
if ($dgz < 0 || $dgz >= 60) {
$this->logs(3,2);
return false;
}
if ($hgz < 0 || $hgz >= 60) {
$this->logs(3,3);
return false;
}
if (! key_exists($mgz, $this->MGZ($ygz))) {
$this->logs(2,0);
return false;
}
if (! key_exists($hgz, $this->HGZ($dgz))) {
$this->logs(2,1);
return false;
}
$yeaf = $yeai + $mx * 60;
if ($yeai < -1000 || $yeaf > 3000) {
$this->logs(1);
return false;
}
$ifs = array();
for ($m = 0; $m <= $mx - 1; $m++) {
$yea = $yeai + $m * 60;
$syc = ($yea + 56) % 60;
$asyc = ($ygz + 60 - $syc) % 60;
$iy = $yea + $asyc;
$jdpjq = $this->GetPureJQsinceSpring($iy);
$mgzo = ($mgz + 60 - 2) % 12;
$ijd = $jdpjq[$mgzo];
$fjd = $jdpjq[$mgzo + 1];
$sdc = (floor($ijd) + 49) % 60;
$asdc = ($dgz + 60 - $sdc) % 60;
$idd = floor($ijd + $asdc);
$ihh = $hgz % 12;
$id = $idd + ($ihh * 2 - 13) / 24;
$fd = $idd + ($ihh * 2 - 11) / 24;
if ($fd < $ijd || $id > $fjd) {
} else {
if ($id > $ijd && $fd < $fjd) {
$ids = $id;
$fds = $fd;
}
if ($id < $ijd && $fd > $ijd) {
$ids = $ijd;
$fds = $fd;
}
if ($id < $fjd && $fd > $fjd) {
$ids = $id;
$fds = $fjd;
}
$ifs[] = [$this->Jtime($ids), $this->Jtime($fds)];
}
}
return $ifs;
}
public function fatemaps($xb, $yy, $mm, $dd, $hh, $mt = 0, $ss = 0) {
$xb = intval($xb) ? 1 : 0;
$yy = intval($yy);
$mm = intval($mm);
$dd = intval($dd);
$hh = intval($hh);
$mt = intval($mt);
$ss = intval($ss);
if ($yy < -1000 || $yy > 3000) {
$this->logs(1);
return false;
}
$spcjd = $this->Jdays($yy, $mm, $dd, $hh, $mt, $ss);
if ($spcjd === false) {
return false;
}
[$yy, $mm, $dd, $hh, $mt, $ss] = $this->Jtime($spcjd);
$ta = 365.24244475;
$rt = array();
$nwx = [0, 0, 0, 0, 0];
$nyy = [0, 0];
$szs = [1,6,10,9,10,9,7,0,4,3];
$ty = $yy;
$jr = $this->GetPureJQsinceSpring($ty);
if ($spcjd < $jr[0]) {
$ty = $yy - 1;
$jr = $this->GetPureJQsinceSpring($ty);
}
[$tg, $dz] = $this->GetGZ($yy, $mm, $dd, $hh, $mt, $ss);
$yytg = array();
$yydz = array();
$ewxtg = array();
$ewxdz = array();
for ($k = 0; $k <= 3; $k++) {
$yytg[$k] = $tg[$k] % 2;
$nyy[$yytg[$k]] = $nyy[$yytg[$k]] + 1;
$yydz[$k] = $dz[$k] % 2;
$nyy[$yydz[$k]] = $nyy[$yydz[$k]] + 1;
$ewxtg[$k] = $this->wxtg[$tg[$k]];
$nwx[$ewxtg[$k]] = $nwx[$ewxtg[$k]] + 1;
$ewxdz[$k] = $this->wxdz[$dz[$k]];
$nwx[$ewxdz[$k]] = $nwx[$ewxdz[$k]] + 1;
}
$rt['nyy'] = $nyy;
$rt['nwx'] = $nwx;
$rt['yytg'] = $yytg;
$rt['yydz'] = $yydz;
$rt['ewxtg'] = $ewxtg;
$rt['ewxdz'] = $ewxdz;
$bzcg = array();
$wxcg = array();
$yycg = array();
$bctg = array();
for ($i = 0; $i <= 3; $i++) {
$wxcg[$i] = array();
$yycg[$i] = array();
for ($j = 0; $j <= 2; $j++) {
$nzcg = $this->zcg[$dz[$i]][$j];
if ($nzcg >= 0) {
$bctg[3 * $i + $j] = $this->ctg[$nzcg];
$bzcg[3 * $i + $j] = $this->sss[$this->dgs[$nzcg][$tg[2]]];
$wxcg[$i][$j] = $this->wxtg[$nzcg];
$yycg[$i][$j] = $nzcg % 2;
} else {
$bctg[3 * $i + $j] = "";
$bzcg[3 * $i + $j] = "";
}
}
}
$rt['bctg'] = $bctg;
$rt['bzcg'] = $bzcg;
$rt['wxcg'] = $wxcg;
$rt['yycg'] = $yycg;
for ($i = 0; $i <= 14; $i++) {
if ($jr[$i] > $spcjd) {
$ord = $i - 1;
break;
}
}
$xf = $spcjd - $jr[$ord];
$yf = $jr[$ord + 1] - $spcjd;
if ((($xb == 0) && ($yytg[0] == 0)) || (($xb == 1) && ($yytg[0] == 1))) {
$zf = $ta * 10 * ($yf / ($yf + $xf));
$forward = 0;
} else {
$zf = $ta * 10 * ($xf / ($yf + $xf));
$forward = 1;
}
$qyt = $spcjd + $zf;
$jt = $this->Jtime($qyt);
$qyy = $jt[0];
$rt['qyy'] = $qyy;
$rt['qyy_desc'] = "出生后" . intval($zf / $ta) . "年" . intval($zf % $ta / ($ta / 12)) . "个月" . intval($zf % $ta % ($ta / 12)) . "天起运";
$qjr = $this->GetPureJQsinceSpring($qyy);
if ($qyt >= $qjr[0]) {
$jqyy = $qyy;
} else {
$jqyy = $qyy - 1;
}
$jtd = (($jqyy + 4712 + 24) % 10 + 10) % 10;
$jtd = $this->ctg[(($jqyy + 4712 + 24) % 10 + 10) % 10] . " " . $this->ctg[(($jqyy + 4712 + 24 + 5) % 10 + 10) % 10];
$rt['qyy_desc2'] = "每逢 " . $jtd . " 年" . $jt[1] . "月" . $jt[2] . "日交大運";
$qage = $jqyy - $ty;
$rt['dy'] = array();
$zqage = array();
$zboz = array();
$zfman = array();
$zfmbn = array();
$zfma = array();
$zfmb = array();
$nzs = array();
$mgz = ((10 + $tg[1] - $dz[1]) % 10) / 2 * 12 + $dz[1];
for ($k = 0; $k <= 8; $k++) {
if (! is_array($rt['dy'][$k])) {
$rt['dy'][$k] = array();
}
$rt['dy'][$k]['zqage'] = $zqage[$k] = $qage + 1 + $k * 10;
$rt['dy'][$k]['zboz'] = $zboz[$k] = $qage + 1 + $k * 10 + 9;
$rt['dy'][$k]['zfman'] = $zfman[$k] = ($mgz + 60 + pow(-1, $forward) * ($k + 1)) % 10;
$rt['dy'][$k]['zfmbn'] = $zfmbn[$k] = ($mgz + 60 + pow(-1, $forward) * ($k + 1)) % 12;
$rt['dy'][$k]['zfma'] = $zfma[$k] = $this->ctg[$zfman[$k]];
$rt['dy'][$k]['zfmb'] = $zfmb[$k] = $this->cdz[$zfmbn[$k]];
$rt['dy'][$k]['nzs'] = $nzs[$k] = (24 + $szs[$tg[2]] + pow(-1, $tg[2]) * ($zfmbn[0] + pow(-1, $forward) * $k)) % 12;
$rt['dy'][$k]['nzsc'] = $this->czs[$nzs[$k]];
}
$lyean = array();
$lyebn = array();
$lye = array();
for ($j = 0; $j <= 89; $j++) {
$k = intval($j / 10);
$i = $j % 10;
if (! is_array($rt['dy'][$k]['ly'])) {
$rt['dy'][$k]['ly'] = array();
}
if (! is_array($rt['dy'][$k]['ly'][$i])) {
$rt['dy'][$k]['ly'][$i] = array();
}
$rt['dy'][$k]['ly'][$i]['age'] = $j + $qage + 1;
$rt['dy'][$k]['ly'][$i]['year'] = $j + $qage + $jqyy;
$rt['dy'][$k]['ly'][$i]['lyean'] = $lyean[$j] = ($tg[0] + $j + $qage) % 10;
$rt['dy'][$k]['ly'][$i]['lyebn'] = $lyebn[$j] = ($dz[0] + $j + $qage) % 12;
$rt['dy'][$k]['ly'][$i]['lye'] = $lye[$j] = $this->ctg[$lyean[$j]] . $this->cdz[$lyebn[$j]];
}
$zr = $this->GetZQsinceWinterSolstice($yy);
if ($spcjd < $zr[0]) {
$zr = $this->GetZQsinceWinterSolstice($yy - 1);
}
for ($i = 0; $i <= 13; $i++) {
if ($spcjd < $zr[$i]) {
$xz = ($i + 12 - 1) % 12;
break;
}
}
$rt['mz'] = $this->mz[$xb];
$rt['xb'] = $this->xb[$xb];
$rt['gl'] = [$yy, $mm, $dd];
$rt['nl'] = $this->Solar2Lunar($yy, $mm, $dd);
$rt['tg'] = $tg;
$rt['dz'] = $dz;
$rt['sz'] = array();
$rt['ctg'] = array();
$rt['cdz'] = array();
for($i = 0; $i <= 3; $i++){
$rt['sz'][$i] = $this->ctg[$tg[$i]] . $this->cdz[$dz[$i]];
$rt['ctg'][$i] = $this->ctg[$tg[$i]];
$rt['cdz'][$i] = $this->cdz[$dz[$i]];
}
$rt['sx'] = $this->csx[$dz[0]];
$rt['xz'] = $this->cxz[$xz];
$rt['cyy'] = $this->cyy[$yytg[2]];
return $rt;
}
}
GLOBALS['GX'] = array(
[0, 0, [0, 5], 4, '甲己合化土'],
[0, 0, [1, 6], 0, '乙庚合化金'],
[0, 0, [2, 7], 1, '丙辛合化水'],
[0, 0, [3, 8], 2, '丁壬合化木'],
[0, 0, [4, 9], 3, '戊癸合化火'],
[0, 1, [0, 6], -1, '甲庚冲'],
[0, 1, [1, 7], -1, '乙辛冲'],
[0, 1, [2, 8], -1, '丙壬冲'],
[0, 1, [3, 9], -1, '丁癸冲'],
[1, 2, [0, 1], 4, '子丑合化土'],
[1, 2, [2, 11], 2, '寅亥合化木'],
[1, 2, [3, 10], 3, '卯戌合化火'],
[1, 2, [4, 9], 0, '辰酉合化金'],
[1, 2, [5, 8], 1, '巳申合化水'],
[1, 2, [6, 7], 3, '午未合化火'],
[1, 3, [2, 3, 4], 2, '寅卯辰会木'],
[1, 3, [5, 6, 7], 3, '巳午未会火'],
[1, 3, [8, 9, 10], 0, '申酉戌会金'],
[1, 3, [11, 0, 1], 1, '亥子丑会水'],
[1, 4, [2, 6, 10], 3, '寅午戌三合火'],
[1, 4, [8, 0, 4], 1, '申子辰三合水'],
[1, 4, [5, 9, 1], 0, '巳酉丑三合金'],
[1, 4, [11, 3, 7], 2, '亥卯未三合木'],
[1, 5, [0, 6], -1, '子午冲'],
[1, 5, [1, 7], -1, '丑未冲'],
[1, 5, [2, 8], -1, '寅申冲'],
[1, 5, [3, 9], -1, '卯酉冲'],
[1, 5, [4, 10], -1, '辰戌冲'],
[1, 5, [5, 11], -1, '巳亥冲'],
[1, 6, [0, 7], -1, '子未害'],
[1, 6, [1, 6], -1, '丑午害'],
[1, 6, [2, 5], -1, '寅巳害'],
[1, 6, [3, 4], -1, '卯辰害'],
[1, 6, [8, 11], -1, '申亥害'],
[1, 6, [9, 10], -1, '酉戌害'],
[1, 7, [2, 5], -1, '寅巳相刑'],
[1, 7, [5, 8], -1, '巳申相刑'],
[1, 7, [8, 2], -1, '申寅相刑'],
[1, 7, [1, 10], -1, '丑戌相刑'],
[1, 7, [10, 7], -1, '戌未相刑'],
[1, 7, [7, 1], -1, '未丑相刑'],
[1, 7, [0, 3], -1, '子卯相刑'],
[1, 7, [9, 9], -1, '酉酉相刑'],
[1, 7, [11, 11], -1, '亥亥相刑'],
[1, 7, [6, 6], -1, '午午相刑'],
[1, 7, [4, 4], -1, '辰辰相刑'],
[1, 8, [2, 5, 8], -1, '寅巳申三刑'],
[1, 8, [1, 10, 7], -1, '丑戌未三刑'],
[1, 9, [3, 8], -1, '卯申暗合'],
[1, 9, [6, 11], -1, '午亥暗合'],
[1, 9, [1, 2], -1, '丑寅暗合'],
[1, 9, [2, 7], -1, '寅未暗合'],
[1, 9, [0, 10], -1, '子戌暗合'],
[1, 9, [0, 4], -1, '子辰暗合'],
[1, 9, [5, 9], -1, '巳酉暗合']
);
function pc_array_power_set($array){
$results = array(array());
foreach ($array as $element){
foreach ($results as $combination){
array_push($results, array_merge(array($element), $combination));
}
}
return $results;
}
function GetGX($tg, $dz){
$list = array();
foreach ($GLOBALS['GX'] as $gx){
$to = ($gx[0] == 0) ? $tg : $dz;
$fd = array_intersect($to, $gx[2]);
if(empty(array_diff($gx[2], $fd))){
$c1 = count($fd);
$c2 = count($gx[2]);
$fds = array();
if($c1 < $c2){
}
if($c1 == $c2){
array_push($fds, $fd);
}
if($c1 > $c2){
$set = pc_array_power_set(array_keys($fd));
foreach ($set as $keys){
if(count($keys) != $c2){
continue;
}
$fd = array();
foreach ($keys as $key){
$fd[$key] = $to[$key];
}
if(empty(array_diff($gx[2], $fd))){
array_push($fds, $fd);
}
}
}
foreach ($fds as $fd){
array_push($list, [$fd, $gx]);
}
}
}
return $list;
}