php实现获取农历(阴历)、节日、节气的类与用法示例
发布时间:2021-03-15 06:17:56 所属栏目:编程 来源:网络整理
导读:本篇章节讲解php实现获取农历(阴历)、节日、节气的类与用法。分享给大家供大家参考,具体如下: lunarInfo[$year-$this->MIN_YEAR]; if($year==$this->MIN_YEAR$month getLunarByBetween($year,$this->getDaysBetweenSolar($year,$date,$yearData[1],$year
本篇章节讲解php实现获取农历(阴历)、节日、节气的类与用法。分享给大家供大家参考,具体如下: lunarInfo[$year-$this->MIN_YEAR]; if($year==$this->MIN_YEAR&&$month<=2&&$date<=9) return array(1891,'正月','初一','辛卯','兔'); return $this->getLunarByBetween($year,$this->getDaysBetweenSolar($year,$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,'兔'); $month_days_ary = array(31,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,$i,$yearData[2])); $array[] = $year . '-' . $month . '-' . $i; $lunar_ary[$i] = $array; } return $lunar_ary; } /** * 将阴历转换为阳历 * @param year 阴历-年 * @param month 阴历-月,闰月处理:例如如果当年闰五月,那么第二个五月就传六月,相当于阴历有13个月,只是有的时候第13个月的天数为0 * @param date 阴历-日 */ function convertLunarToSolar($year,$date) { $yearData = $this->lunarInfo[$year-$this->MIN_YEAR]; $between = $this->getDaysBetweenLunar($year,$date); $res = mktime(0,$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,$day); } /** * 判断是否是闰年 * @param year */ function isLeapYear($year) { return (($year%4==0 && $year%100 !=0) || ($year%400==0)); } /** * 获取干支纪年 * @param year */ function getLunarYearName($year) { $sky = array('庚','辛','壬','癸','甲','乙','丙','丁','戊','己'); $earth = array('申','酉','戌','亥','子','丑','寅','卯','辰','巳','午','未'); $year = $year.''; return $sky[$year{3}].$earth[$year%12]; } /** * 根据阴历年获取生肖 * @param year 阴历年 */ function getYearZodiac($year) { $zodiac = array('猴','鸡','狗','猪','鼠','牛','虎','兔','龙','蛇','马','羊'); return $zodiac[$year%12]; } /** * 获取阳历月份的天数 * @param year 阳历-年 * @param month 阳历-月 */ 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"]; } /** * 获取阴历月份的天数 * @param year 阴历-年 * @param month 阴历-月,从一月开始 */ function getLunarMonthDays($year,$month) { $monthData = $this->getLunarMonths($year); return $monthData[$month-1]; } /** * 获取阴历每月的天数的数组 * @param year */ function getLunarMonths($year) { $yearData = $this->lunarInfo[$year - $this->MIN_YEAR]; $leapMonth = $yearData[0]; $bit = decbin($yearData[3]); for ($i = 0; $i < strlen($bit);$i ++) $bitArray[$i] = substr($bit,1); for($k=0,$klen=16-count($bitArray);$k<$klen;$k++) array_unshift($bitArray,'0'); $bitArray = array_slice($bitArray,($leapMonth==0?12:13)); for($i=0; $i'.chr(10); $data=array(); if($day<$day1){ $data['name1']=$term_name[$idx1-1]; $data['name2']=$term_name[$idx1-1].'后'; }else if($day==$day1){ $data['name1']=$term_name[$idx1]; $data['name2']=$term_name[$idx1]; }else if($day>$day1 && $day<$day2){ $data['name1']=$term_name[$idx1]; $data['name2']=$term_name[$idx1].'后'; }else if($day==$day2){ $data['name1']=$term_name[$idx1+1]; $data['name2']=$term_name[$idx1+1]; }else if($day>$day2){ $data['name1']=$term_name[$idx1+1]; $data['name2']=$term_name[$idx1+1].'后'; } return $data; } /* * 获取节日:特殊的节日只能修改此函数来计算 */ function getFestival($today,$nl_info = false,$config = 1) { if($config == 1) { $arr_lunar=array('01-01'=>'春节','01-15'=>'元宵节','02-02'=>'二月二','05-05'=>'端午节','07-07'=>'七夕节','08-15'=>'中秋节','09-09'=>'重阳节','12-08'=>'腊八节','12-23'=>'小年'); $arr_solar=array('01-01'=>'元旦','02-14'=>'情人节','03-12'=>'植树节','04-01'=>'愚人节','05-01'=>'劳动节','06-01'=>'儿童节','10-01'=>'国庆节','10-31'=>'万圣节','12-24'=>'平安夜','12-25'=>'圣诞节'); }//需要不同节日的,用不同的$config,然后配置$arr_lunar和$arr_solar $festivals = array(); list($y,$d) = explode('-',$today); if(!$nl_info) $nl_info = $this->convertSolarToLunar($y,intval($m),intval($d)); if($nl_info[7]>0&&$nl_info[7]<$nl_info[4]) $nl_info[4]-=1; $md_lunar = substr('0'.$nl_info[4],-2).'-'.substr('0'.$nl_info[5],-2); $md_solar=substr_replace($today,'',5); isset($arr_lunar[$md_lunar])?array_push($festivals,$arr_lunar[$md_lunar]):''; isset($arr_solar[$md_solar])?array_push($festivals,$arr_solar[$md_solar]):''; $glweek = date("w",strtotime($today)); //0-6 if($m==5&&($d>7)&&($d<15)&&($glweek==0))array_push($festivals,"母亲节"); if($m==6&&($d>14)&&($d<22)&&($glweek==0))array_push($festivals,"父亲节"); $jieqi = $this->getJieQi($y,$d); if($jieqi)array_push($festivals,$jieqi); return implode('/',$festivals); } /* * 获取当前时间属于哪个时辰 @param int $time 时间戳 */ function getTheHour($h){ $d=$h; if($d==23 || $d==0){ return '子时'; }else if($d==1 || $d==2){ return '丑时'; }else if($d==3 || $d==4){ return '寅时'; }else if($d==5 || $d==6){ return '卯时'; }else if($d==7 || $d==8){ return '辰时'; }else if($d==9 || $d==10){ return '巳时'; }else if($d==11 || $d==12){ return '午时'; }else if($d==13 || $d==14){ return '未时'; }else if($d==15 || $d==16){ return '申时'; }else if($d==17 || $d==18){ return '酉时'; }else if($d==19 || $d==20){ return '戌时'; }else if($d==21 || $d==22){ return '亥时'; } } } //示例代码: $lunar=new Lunar(); $today=$lunar->convertSolarToLunar(date(Y),date(m),date(d)); echo "今天是公元".date(Y)."年".date(m)."月".date(d)."日 "; echo "今天是农历".$today[0]."年".$today[1]."月".$today[2]."农历".$today[3]."年".$today[4]."月".$today[5]."日".$today[6]."年 "; $month=$lunar->getJieQi(date(Y),date(d));//获取当前节气 echo "今天节气:".$month[name2]; ?> 运行结果如下: PS:这里再为大家推荐几款日期相关在线工具供大家参考: 网页万年历日历: 在线阴历/阳历转换工具: 在线万年历日历: 在线万年历黄历flash版: 更多关于PHP相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》、《》及《》 希望本文所述对大家PHP程序设计有所帮助。 (编辑:广西网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐