找回密码
 注册

[PHP] PHP计算天干地支和生肖,年份无两百年限制

php 发表于 2012/7/31 00:47 | 显示全部楼层 |阅读模式
<?php
function getYear($jY){
/*
*PHP计算天干地支
*参数为干支时返回结果为1至当前年的所有干支为参数值的公元纪年年份
*参数为4位数字时返回当前年份的干支纪年
*轻松E站 www.Qsyz.net原创程序
*/
$jYears=array();
$thisYear=date('Y');
$animals=array('鼠','牛','虎','兔','龙','蛇','马','羊','猴','鸡','狗','猪');
$gZ=array('甲子','乙丑','丙寅','丁卯','戊辰','已巳','庚午','辛未','壬申','癸酉','甲戌','乙亥','丙子','丁丑','戊寅','已卯','庚辰','辛巳','壬午','癸未','甲申','乙酉','丙戌','丁亥','戊子','己丑','庚寅','辛卯','壬辰','癸巳','甲午','乙未','丙申','丁酉','戊戌','已亥','庚子','辛丑','壬寅','癸卯','甲辰','乙巳','丙午','丁未','戊申','已酉','庚戌','辛亥','壬子','癸丑','甲寅','乙卯','丙辰','丁巳','戊午','已未','庚申','辛酉','壬戌','癸亥');

for($i=0,$yr=1924;$i<count($gZ),$yr<1984;$i++,$yr++){//为干支生成年份,1924年为甲子年
        $jYears[$gZ[$i]]=$yr;
}

if(is_numeric($jY) && $jY>0){//如果参数是数字将公历年份换算成干支
        $jYn=$jY%60;
        while($jYn<=$thisYear){
                if(array_search($jYn,$jYears)) {
                        $rs=array_search($jYn,$jYears);
                        switch(iconv_substr($rs,1,1,"gbk")){//由年支推算生肖,如此编码是utf-8请将gbk改为utf-8
                                case '子':$aI=0;break;
                                case '丑':$aI=1;break;
                                case '寅':$aI=2;break;
                                case '卯':$aI=3;break;
                                case '辰':$aI=4;break;
                                case '巳':$aI=5;break;
                                case '午':$aI=6;break;
                                case '未':$aI=7;break;
                                case '申':$aI=8;break;
                                case '酉':$aI=9;break;
                                case '戌':$aI=10;break;
                                case '亥':$aI=11;
                        }
                return $jY.'年是'.$rs.$animals[$aI].'年';
                } else {
                        $jYn+=60;
                }
        }
} else if(in_array($jY,$gZ)){//如果参数是干支则转换为公元年份
        $sYear=$jYears[$jY];
        $yr=1;$sYearStr='';
        while($yr<=$thisYear){
                if(($sYear-$yr)%60==0){
                        $sYearStr.=' , '.$yr;
                }
                $yr++;
        }
                return '公元1--'.$thisYear.'年中的所有'.$jY.'年年份:'.substr($sYearStr,2);
        } else {
                return '参数错误';
        }
}
echo getYear('2400');//调用函数
?>

手机版|轻松E站

轻松E站

快速回复 返回顶部 返回列表