[新会话] @旧人,以下是一个使用PHP和HTML编写的简单八字排盘程序的示例:
HTML文件(index.html):
<!DOCTYPE html>
<html>
<head>
<title>八字排盘</title>
<meta charset="utf-8">
</head>
<body>
<h1>八字排盘</h1>
<form method="post" action="bazi.php">
<label for="year">出生年份:</label>
<input type="text" name="year" id="year"><br><br>
<label for="month">出生月份:</label>
<input type="text" name="month" id="month"><br><br>
<label for="day">出生日期:</label>
<input type="text" name="day" id="day"><br><br>
<label for="hour">出生时辰:</label>
<input type="text" name="hour" id="hour"><br><br>
<input type="submit" value="提交">
</form>
</body>
</html>
PHP文件(bazi.php):
<?php
// 获取出生日期和时间
$year = intval($_POST['year']);
$month = intval($_POST['month']);
$day = intval($_POST['day']);
$hour = intval($_POST['hour']);
// 计算八字
$bazi = get_bazi($year, $month, $day, $hour);
// 输出八字结果
echo "<h2>您的八字:</h2>";
echo "<p>阳历出生日期:{$year}年{$month}月{$day}日{$hour}时</p>";
echo "<p>阴历出生日期:{$bazi['lunarYear']}年{$bazi['lunarMonth']}月{$bazi['lunarDay']}日{$bazi['lunarHour']}时</p>";
echo "<p>四柱八字:{$bazi['year']}年{$bazi['month']}月{$bazi['day']}日{$bazi['hour']}时</p>";
echo "<p>十二生肖:{$bazi['animal']}</p>";
echo "<p>五行:{$bazi['wuxing']}</p>";
// 计算八字函数
function get_bazi($year, $month, $day, $hour) {
// 计算阳历和阴历日期
$solarDate = new DateTime("{$year}-{$month}-{$day} {$hour}:00:00");
$lunarDate = Lunar::SolarToLunar($year, $month, $day);
// 计算八字
$bazi = BaZi::getBaZi($year, $month, $day, $hour);
// 获取生肖和五行
$animal = BaZi::getAnimal($year);
$wuxing = BaZi::getWuXing($bazi['yearGan'], $bazi['yearZhi']);
// 返回结果
return array(
'year' => $bazi['yearGan'].$bazi['yearZhi'],
'month' => $bazi['monthGan'].$bazi['monthZhi'],
'day' => $bazi['dayGan'].$bazi['dayZhi'],
'hour' => $bazi['hourGan'].$bazi['hour
@旧人,
.'Zhi'],
'lunarYear' => $lunarDate->year,
'lunarMonth' => $lunarDate->month,
'lunarDay' => $lunarDate->day,
'lunarHour' => BaZi::getLunarHour($hour, $lunarDate->day),
'animal' => $animal,
'wuxing' => $wuxing,
);
}
// 计算农历日期和节气的类
class Lunar {
// 农历信息表
private static $LunarTable = array(
array(2635, 2698, 0, 15.2184),
// ... 中间省略部分
array(4645, 4645, 0, 14.5),
array(4646, 4646, 1, 13.8370),
array(4647, 4647, 0, 15.1416),
// ... 中间省略部分
);
// 计算公历日期的农历日期和节气
public static function SolarToLunar($year, $month, $day) {
$solarDate = new DateTime("{$year}-{$month}-{$day} 00:00:00");
$date1 = new DateTime("1900-1-31 00:00:00");
$offset = floor(($solarDate->format('U') - $date1->format('U')) / 86400);
$lunarYear = 1900;
$i = 0;
while ($lunarYear <= 2100 && $offset > 0) {
$leap = self::GetLeap($lunarYear);
$daysOfYear = $leap == 0 ? 365 : 366;
$offset -= $daysOfYear;
$lunarYear++;
}
if ($offset < 0) {
$offset += $daysOfYear;
$lunarYear--;
}
$leap = self::GetLeap($lunarYear);
$isLeapMonth = false;
$iMonth = 1;
while ($iMonth <= 12 && $offset > 0) {
if ($leap > 0 && $iMonth == ($leap + 1) && $isLeapMonth == false) {
$iMonth--;
$isLeapMonth = true;
$daysOfMonth = self::GetDaysOfMonth($lunarYear, $iMonth);
} else {
$daysOfMonth = self::GetDaysOfMonth($lunarYear, $iMonth);
}
if ($isLeapMonth == true && $iMonth == ($leap + 1)) {
$isLeapMonth = false;
}
$offset -= $daysOfMonth;
if ($isLeapMonth == false) {
$iMonth++;
}
}
if ($offset == 0 && $leap > 0 && $iMonth == $leap + 1) {
if ($isLeapMonth == true) {
$isLeapMonth = false;
} else {
$isLeapMonth = true;
$iMonth--;
}
}
if ($offset < 0) {
$offset += $daysOfMonth;
$iMonth--;
}
$lunarDay = $offset + 1;
$lunarMonth = $isLeapMonth == true ? "闰".$iMonth : $iMonth;
return (object
@旧人,array(
'year' => $lunarYear,
'month' => $lunarMonth,
'day' => $lunarDay,
));
}
// 获取某一年的闰月
private static function GetLeap($year) {
$leap = self::$LunarTable[$year - 1900][1];
return $leap > 0 ? $leap - 1 : -1;
}
// 获取某年某月的天数
private static function GetDaysOfMonth($year, $month) {
$days = (self::$LunarTable[$year - 1900][2] & (0x10000 >> $month)) > 0 ? 30 : 29;
return $days;
}
}
// 八字计算的类
class BaZi {
// 天干
private static $TianGan = array('甲', '乙', '丙', '丁', '戊', '己', '庚', '辛', '壬', '癸');
// 地支
private static $DiZhi = array('子', '丑', '寅', '卯', '辰', '巳', '午', '未', '申', '酉', '戌', '亥');
// 五行
private static $WuXing = array('金', '木', '水', '火', '土');
// 生肖
private static $Animal = array('鼠', '牛', '虎', '兔', '龙', '蛇', '马', '羊', '猴', '鸡', '狗', '猪');
// 天干五行对应表
private static $TianGanWuXing = array('金', '金', '木', '木', '土', '土', '金', '金', '水', '水');
// 地支五行对应表
private static $DiZhiWuXing = array('水', '土', '木', '木', '土', '火', '火', '土', '金', '金', '土', '水');
// 计算八字
public static function getBaZi($year, $month, $day, $hour) {
$jiazi = self::getJiaZiIndex($year, $month, $day, $hour);
$ganIndex = ($jiazi % 10) - 1;
$zhiIndex = ($jiazi % 12) - 1;
if ($ganIndex < 0) {
$ganIndex = 9;
}
if ($zhiIndex < 0) {
$zhiIndex = 11;
}
$yearGan = self::$TianGan[$ganIndex];
$yearZhi = self::$DiZhi[$zhiIndex];
$monthGan = self::$TianGan[($ganIndex + self::getMonthGanIndex($month)) % 10];
$monthZhi = self::$DiZhi[($zhiIndex + self::getMonthZhiIndex($month)) % 12];
$dayGan = self::$TianGan[($ganIndex + self::get
@旧人,DayGanIndex($year, $month, $day)) % 10];
$dayZhi = self::$DiZhi[($zhiIndex + self::getDayZhiIndex($year, $month, $day)) % 12];
$hourGan = self::$TianGan[($ganIndex + self::getHourGanIndex($hour)) % 10];
$hourZhi = self::$DiZhi[($zhiIndex + self::getHourZhiIndex($hour)) % 12];
return array(
'yearGan' => $yearGan,
'yearZhi' => $yearZhi,
'monthGan' => $monthGan,
'monthZhi' => $monthZhi,
'dayGan' => $dayGan,
'dayZhi' => $dayZhi,
'hourGan' => $hourGan,
'hourZhi' => $hourZhi,
);
}
// 获取年柱所在天干的位置
private static function getJiaZiIndex($year, $month, $day, $hour) {
$startYear = 1864;
$startMonth = 2;
$startDay = 8;
$startHour = 23;
$offset = 0;
for ($i = $startYear; $i < $year; $i++) {
$offset += self::getYearDays($i);
}
$offset += self::getMonthDays($year, $month);
$offset += $day - 1;
$offset *= 12;
$offset += $hour >= 23 ? 0 : intval($hour / 2) + 1;
$offset += ($startHour - 1) * 12;
$offset += self::getDiZhiIndex($startYear, $startMonth, $startDay);
return $offset;
}
// 获取月柱所在天干的位置
private static function getMonthGanIndex($month) {
$index = ($month - 1) % 10;
return $index;
}
// 获取月柱所在地支的位置
private static function getMonthZhiIndex($month) {
$index = ($month - 1) % 12;
return $index;
}
// 获取日柱所在天干的位置
private static function getDayGanIndex($year, $month, $day) {
$startYear = 1900;
$startMonth = 1;
$startDay = 31;
$startGanIndex = 6; // 甲戌
$offset = 0;
for ($i = $startYear; $i < $year; $i++) {
$offset += self::getYearDays($i);
}
for ($i = $startMonth; $i < $month; $i++) {
$offset += self::getMonthDays($year, $i);
}
$offset += $day - $startDay;
$ganIndex = ($startGanIndex + $offset) % 10;
return $ganIndex;
}
// 获取日柱所在地支的位置
private static function getDayZhiIndex($year, $month, $day) {
$startYear = 1900;
$startMonth = 1
后悔问了 这也太长了
@旧人,
;
$startDay = 31;
$startZhiIndex = 10; // 戌
$offset = 0;
for ($i = $startYear; $i < $year; $i++) {
$offset += self::getYearDays($i);
}
for ($i = $startMonth; $i < $month; $i++) {
$offset += self::getMonthDays($year, $i);
}
$offset += $day - $startDay;
$zhiIndex = ($startZhiIndex + $offset) % 12;
return $zhiIndex;
}
// 获取时柱所在天干的位置
private static function getHourGanIndex($hour) {
$ganIndex = ($hour + 1) % 10;
return $ganIndex;
}
// 获取时柱所在地支的位置
private static function getHourZhiIndex($hour) {
$zhiIndex = ($hour + 1) % 12;
return $zhiIndex;
}
// 获取某一年的天数
private static function getYearDays($year) {
$days = 365;
if (($year % 4 == 0 && $year % 100 != 0) || $year % 400 == 0) {
$days = 366;
}
return $days;
}
// 获取某一月的天数
private static function getMonthDays($year, $month) {
$days = 0;
if ($month == 2) {
$days = (($year % 4 == 0 && $year % 100 != 0) || $year % 400 == 0) ? 29 : 28;
} else if (in_array($month, array(4, 6, 9, 11))) {
$days = 30;
} else {
$days = 31;
}
return $days;
}
// 获取某年的生肖
public static function getAnimal($year) {
$index = ($year - 4) % 12;
return self::$Animal[$index];
}
// 获取某一天的五行
public static function getWuXing($gan, $zhi) {
$ganIndex = array_search($gan, self::$TianGan);
$zhiIndex = array_search($zhi, self::$DiZhi);
$wuxingIndex = ($ganIndex + $zhiIndex) % 10;
return self::$WuXing[$wuxingIndex / 2];
}
// 获取某一小时的地支
public static function getLunarHour($hour, $day) {
$startHour = ($day - 1) * 24 + 23;
$offset = ($hour - $startHour) / 2;
$zhiIndex = ($offset + 1) % 12;
return self::$DiZhi[$zhiIndex];
}
// 获取某一天的地支
private static function getDiZhiIndex($year, $month, $day) {
$startYear = 1900;
$startMonth = 1;
$startDay = 31;
$startZhiIndex = 10; // 戌
$offset = 0;
@旧人,for ($i = $startYear; $i < $year; $i++) {
$offset += self::getYearDays($i);
}
for ($i = $startMonth; $i < $month; $i++) {
$offset += self::getMonthDays($year, $i);
}
$offset += $day - $startDay;
$zhiIndex = ($startZhiIndex + $offset) % 12;
return $zhiIndex;
}
}
// 根据出生日期和时间获取八字和命盘信息
function getBaZiInfo($year, $month, $day, $hour) {
$bazi = BaZi::getBaZi($year, $month, $day, $hour);
$animal = BaZi::getAnimal($year);
$wuxing = BaZi::getWuXing($bazi['yearGan'], $bazi['yearZhi']);
$lunarDate = Lunar::SolarToLunar($year, $month, $day);
return array(
'bazi' => $bazi,
'lunarYear' => $lunarDate->year,
'lunarMonth' => $lunarDate->month,
'lunarDay' => $lunarDate->day,
'lunarHour' => BaZi::getLunarHour($hour, $lunarDate->day),
'animal' => $animal,
'wuxing' => $wuxing,
);
}
// 根据八字信息获取命盘信息
function getMingPanInfo($bazi) {
$mingpan = array();
$mingpan[1][1] = $bazi['yearGan'].$bazi['yearZhi'];
$mingpan[1][2] = $bazi['monthGan'].$bazi['monthZhi'];
$mingpan[1][3] = $bazi['dayGan'].$bazi['dayZhi'];
$mingpan[1][4] = $bazi['hourGan'].$bazi['hourZhi'];
$yearWuXing = BaZi::getWuXing($bazi['yearGan'], $bazi['yearZhi']);
$monthWuXing = BaZi::getWuXing($bazi['monthGan'], $bazi['monthZhi']);
$dayWuXing = BaZi::getWuXing($bazi['dayGan'], $bazi['dayZhi']);
$hourWuXing = BaZi::getWuXing($bazi['hourGan'], $bazi['hourZhi']);
$mingpan[1][5] = $yearWuXing;
$mingpan[1][6] = $monthWuXing;
$mingpan[1][7] = $dayWuXing;
$mingpan[1][8] = $hourWuXing;
for ($i = 2; $i <= 9; $i++) {
$gap = $i - 1;
$ganIndex = ($bazi['yearGanIndex'] + $gap) % 10;
$zhiIndex = ($bazi['yearZhiIndex'] + $gap) % 12;
$gan = BaZi::$TianGan[$ganIndex];
$zhi = Ba
@旧人,Zi::$DiZhi[$zhiIndex];
$mingpan[$i][1] = $gan.$zhi;
$wuxing = BaZi::getWuXing($gan, $zhi);
$mingpan[$i][2] = $wuxing;
}
return $mingpan;
}
// 根据八字信息和命盘信息生成html代码
function generateBaZiHtml($bazi, $mingpan) {
$html = '';
$html .= '<table>';
$html .= '<tr><td colspan="8">八字</td></tr>';
$html .= '<tr><td>年柱</td><td>'.$bazi['yearGan'].$bazi['yearZhi'].'</td><td>月柱</td><td>'.$bazi['monthGan'].$bazi['monthZhi'].'</td><td>日柱</td><td>'.$bazi['dayGan'].$bazi['dayZhi'].'</td><td>时柱</td><td>'.$bazi['hourGan'].$bazi['hourZhi'].'</td></tr>';
$html .= '<tr><td colspan="8">命盘</td></tr>';
for ($i = 1; $i <= 9; $i++) {
$html .= '<tr><td>'.$i.'岁</td><td>'.$mingpan[$i][1].'</td><td>'.$mingpan[$i][2].'</td><td>'.$mingpan[$i][3].'</td><td>'.$mingpan[$i][4].'</td><td>'.$mingpan[$i][5].'</td><td>'.$mingpan[$i][6].'</td><td>'.$mingpan[$i][7].'</td></tr>';
}
$html .= '<tr><td colspan="8">其他信息</td></tr>';
$html .= '<tr><td>农历</td><td colspan="3">'.$bazi['lunarYear'].'年'.$bazi['lunarMonth'].'月'.$bazi['lunarDay'].'日</td><td>生肖</td><td colspan="3">'.$bazi['animal'].'</td></tr>';
$html .= '<tr><td>五行</td><td colspan="3">'.$bazi['wuxing'].'</td><td>农历时</td><td colspan="3">'.$bazi['lunarHour'].'</td></tr>';
$html .= '</table>';
return $html;
}
// 使用示例
$year = 1990;
$month = 5;
$day = 5;
$hour = 23;
$baziInfo = getBaZiInfo($year, $month, $day, $hour);
$mingpanInfo = getMingPanInfo($baziInfo['bazi']);
$html = generateBaZiHtml($baziInfo['bazi'], $mingpanInfo);
echo $html;
这样就完成了一个用PHP和html实现的八字排盘程序。当然,这只是一个简单的示例,实际应用中可能还需要进行一些改进和优化。
@旧人,这个错误通常是因为在定义数组时使用了箭头符号 "=>",而这个符号只能在数组定义时使用,不能在函数参数列表中使用。
例如:
function myFunction($param1 => $value1, $param2 => $value2) {
// some code here
}
应该修改为:
function myFunction($param1, $param2) {
$value1 = 'some value 1';
$value2 = 'some value 2';
// some code here
}
或者:
function myFunction(array $params) {
$value1 = $params['param1'];
$value2 = $params['param2'];
// some code here
}
请检查您的代码,看看是否存在这样的错误,并尝试进行修复。如果还有其他问题,请告诉我。
@ChatGPT,用PHP+html写一个八字排盘程序