栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > PHP > PHP实例

PHP实现新历与农历互相转换的方法用法

PHP实例 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

PHP实现新历与农历互相转换的方法用法

演示效果:

Array
(
    [0] => 2020
    [1] => 四月
    [2] => 十三
    [3] => 庚子
    [4] => 4
    [5] => 13
    [6] => 鼠
    [7] => 4
)


新建一个index.php文件

convertSolarToLunar($year,$month,$day);

echo '
';
print_r($month);

按照上面的示例,把index.php和lunar.php者两个文件放同一目录下就可以直接调用了


lunar.php类文件

lunarInfo[$year-$this->MIN_YEAR];
		if($year==$this->MIN_YEAR&&$month<=2&&$date<=9){ 
			return array(1891,'正月','初一','辛卯',1,1,'兔');
		}
		return $this->getLunarByBetween($year,$this->getDaysBetweenSolar($year,$month,$date,$yearData[1],$yearData[2]));
	}

	function convertSolarMonthToLunar($year,$month){
		$yearData=$this->lunarInfo[$year-$this->MIN_YEAR];
		if($year==$this->MIN_YEAR&&$month<=2&&$date<=9){ 
			return array(1891,'正月','初一','辛卯',1,1,'兔');
		}
		$month_days_ary=array(31,28,31,30,31,30,31,31,30,31,30,31);
		$dd=$month_days_ary[$month];
		if($this->isLeapYear($year)&& $month==2)$dd++;
		$lunar_ary=array();
		for ($i=1;$i<$dd;$i++){
			$array=$this->getLunarByBetween($year,$this->getDaysBetweenSolar($year,$month,$i,$yearData[1],$yearData[2]));
			$array[]=$year.'-'.$month.'-'.$i;
			$lunar_ary[$i]=$array;
		}
		return $lunar_ary;
	}
	 
	function convertLunarToSolar($year,$month,$date){ 
		$yearData=$this->lunarInfo[$year-$this->MIN_YEAR];
		$between=$this->getDaysBetweenLunar($year,$month,$date);
		$res=mktime(0,0,0,$yearData[1],$yearData[2],$year);
		$res=date('Y-m-d',$res+$between*24*60*60);
		$day=explode('-',$res);
		$year=$day[0];
		$month=$day[1];
		$day=$day[2];
		return array($year,$month,$day);
	}
	 
	function isLeapYear($year){ 
		return (($year%4==0&&$year%100!=0)||($year%400==0));
	}
	 
	function getLunarYearName($year){ 
		$sky=array('庚','辛','壬','癸','甲','乙','丙','丁','戊','己');
		$earth=array('申','酉','戌','亥','子','丑','寅','卯','辰','巳','午','未');
		$year=$year.'';
		return $sky[$year{3}].$earth[$year%12];
	}
	 
	function getYearZodiac($year){ 
		$zodiac=array('猴','鸡','狗','猪','鼠','牛','虎','兔','龙','蛇','马','羊');
		return $zodiac[$year%12];
	}
	 
	function getSolarMonthDays($year,$month){ 
		$monthHash=array('1'=>31,'2'=>$this->isLeapYear($year)?29:28,'3'=>31,'4'=>30,'5'=>31,'6'=>30,'7'=>31,'8'=>31,'9'=>30,'10'=>31,'11'=>30,'12'=>31);
		return $monthHash["$month"];
	}
	 
	function getLunarMonthDays($year,$month){ 
		$monthData=$this->getLunarMonths($year);
		return $monthData[$month-1];
	}
	 
	function getLunarMonths($year){ 
		$yearData=$this->lunarInfo[$year-$this->MIN_YEAR];
		$leapMonth=$yearData[0];
		$bit=decbin($yearData[3]);
		for ($i=0;$ilunarInfo[$year-$this->MIN_YEAR];
		$monthArray=$this->getLunarYearMonths($year);
		$len=count($monthArray);
		return ($monthArray[$len-1]==0?$monthArray[$len-2]:$monthArray[$len-1]);
	}
	function getLunarYearMonths($year){//debugger;
		$monthData=$this->getLunarMonths($year);
		$res=array();
		$temp=0;
		$yearData=$this->lunarInfo[$year-$this->MIN_YEAR];
		$len=($yearData[0]==0?12:13);
		for($i=0;$i<$len;$i++){ 
			$temp=0;
			for($j=0;$j<=$i;$j++){ 
				$temp+=$monthData[$j];
			}
			array_push($res,$temp);
		}
		return $res;
	}
	 
	function getLeapMonth($year){ 
		$yearData=$this->lunarInfo[$year-$this->MIN_YEAR];
		return $yearData[0];
	}
	 
	function getDaysBetweenLunar($year,$month,$date){ 
		$yearMonth=$this->getLunarMonths($year);
		$res=0;
		for($i=1;$i<$month;$i++){ 
			$res+=$yearMonth[$i-1];
		}
		$res+=$date-1;
		return $res;
	}
	 
	function getDaysBetweenSolar($year,$cmonth,$cdate,$dmonth,$ddate){ 
		$a=mktime(0,0,0,$cmonth,$cdate,$year);
		$b=mktime(0,0,0,$dmonth,$ddate,$year);
		return ceil(($a-$b)/24/3600);
	}
	 
	function getLunarByBetween($year,$between){//debugger;
		$lunarArray=array();
		$yearMonth=array();
		$t=0;
		$e=0;
		$leapMonth=0;
		$m='';
		if($between==0){ 
			array_push($lunarArray,$year,'正月','初一');
			$t=1;
			$e=1;
		}else{ 
			$year=$between>0? $year : ($year-1);
			$yearMonth=$this->getLunarYearMonths($year);
			$leapMonth=$this->getLeapMonth($year);
			$between=$between>0?$between : ($this->getLunarYearDays($year)+$between);
			for($i=0;$i<13;$i++){ 
				if($between==$yearMonth[$i]){ 
					$t=$i+2;
					$e=1;
					break;
				}else if($between<$yearMonth[$i]){ 
					$t=$i+1;
					$e=$between-(empty($yearMonth[$i-1])?0:$yearMonth[$i-1])+1;
					break;
				}
			}
			$m=($leapMonth!=0&&$t==$leapMonth+1)?('闰'.$this->getCapitalNum($t- 1,true)):$this->getCapitalNum(($leapMonth!=0&&$leapMonth+1<$t?($t-1):$t),true);
			array_push($lunarArray,$year,$m,$this->getCapitalNum($e,false));
		}
		array_push($lunarArray,$this->getLunarYearName($year));// 天干地支 
		array_push($lunarArray,$t,$e);
		array_push($lunarArray,$this->getYearZodiac($year));// 12生肖 
		array_push($lunarArray,$leapMonth);// 闰几月 
		return $lunarArray;
	}
	 
	function getCapitalNum($num,$isMonth){ 
		$isMonth=$isMonth||false;
		$dateHash=array('0'=>'','1'=>'一','2'=>'二','3'=>'三','4'=>'四','5'=>'五','6'=>'六','7'=>'七','8'=>'八','9'=>'九','10'=>'十 ');
		$monthHash=array('0'=>'','1'=>'正月','2'=>'二月','3'=>'三月','4'=>'四月','5'=>'五月','6'=>'六月','7'=>'七月','8'=>'八月','9'=>'九月','10'=>'十月','11'=>'冬月','12'=>'腊月');
		$res='';
		if($isMonth){ 
			$res=$monthHash[$num];
		}else{ 
			if($num<=10){ 
				$res='初'.$dateHash[$num];
			}else if($num>10&&$num<20){ 
				$res='十'.$dateHash[$num-10];
			}else if($num==20){ 
				$res="二十";
			}else if($num>20&&$num<30){ 
				$res="廿".$dateHash[$num-20];
			}else if($num==30){ 
				$res="三十";
			}
		}
		return $res;
	}
}
?>


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/824873.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号