yuchao 发表于 2018-2-11 11:47:26


            本文实例讲述了php实现获取农历(阴历)、节日、节气的类与用法。分享给大家供大家参考,具体如下:
lunarInfo[$year-$this->MIN_YEAR];
    if($year==$this->MIN_YEAR&&$monthgetLunarByBetween($year,$this->getDaysBetweenSolar($year,$month,$date,$yearData,$yearData));
}
function convertSolarMonthToLunar($year,$month)
{
    $yearData = $this->lunarInfo[$year-$this->MIN_YEAR];
    if($year==$this->MIN_YEAR&&$monthisLeapYear($year) && $month == 2) $dd++;
    $lunar_ary = array();
    for ($i = 1; $i getLunarByBetween($year,$this->getDaysBetweenSolar($year, $month, $i, $yearData, $yearData));
      $array[] = $year . '-' . $month . '-' . $i;
      $lunar_ary[$i] = $array;
    }
    return $lunar_ary;
}
/**
* 将阴历转换为阳历
* @param year 阴历-年
* @param month 阴历-月,闰月处理:例如如果当年闰五月,那么第二个五月就传六月,相当于阴历有13个月,只是有的时候第13个月的天数为0
* @param date 阴历-日
*/
function convertLunarToSolar($year,$month,$date)
{
    $yearData = $this->lunarInfo[$year-$this->MIN_YEAR];
    $between = $this->getDaysBetweenLunar($year,$month,$date);
    $res = mktime(0,0,0,$yearData,$yearData,$year);
    $res = date('Y-m-d', $res+$between*24*60*60);
    $day = explode('-', $res);
    $year = $day;
    $month= $day;
    $day = $day;
    return array($year, $month, $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;
    $bit = decbin($yearData);
    for ($i = 0; $i lunarInfo[$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?12:13);
    for($i=0;$ilunarInfo[$year-$this->MIN_YEAR];
    return $yearData;
}
/**
* 计算阴历日期与正月初一相隔的天数
* @param year
* @param month
* @param date
*/
function getDaysBetweenLunar($year,$month,$date)
{
    $yearMonth = $this->getLunarMonths($year);
    $res=0;
    for($i=1;$i0? $year : ($year-1);
      $yearMonth = $this->getLunarYearMonths($year);
      $leapMonth = $this->getLeapMonth($year);
      $between = $between>0?$between : ($this->getLunarYearDays($year)+$between);
      for($i=0;$igetCapitalNum($t- 1,true)):$this->getCapitalNum(($leapMonth!=0&&$leapMonth+1getCapitalNum($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;
}
/**
* 获取数字的阴历叫法
* @param num 数字
* @param isMonth 是否是月份的数字
*/
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($num10&&$num20&&$num'.__LINE__.' $day1='.$day1,',$day2='.$day2.'
'.chr(10);
    $data=array();
    if($day$day1 && $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,$m,$d) = explode('-',$today);
    if(!$nl_info) $nl_info = $this->convertSolarToLunar($y,intval($m),intval($d));
    if($nl_info>0&&$nl_info7)&&($d14)&&($dgetJieQi($y,$m,$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."年".$today."月".$today."农历".$today."年".$today."月".$today."日".$today."年
";
$month=$lunar->getJieQi(date(Y),date(m),date(d));//获取当前节气
echo "今天节气:".$month;
?>
页: [1]
查看完整版本: php实现获取农历(阴历)、节日、节气的类与用法示例