PHP   发布时间:2022-04-09  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了PHP编程实现阳历转换为阴历的方法实例大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

本文实例讲述了PHP编程实现阳历转换为阴历的方法分享给大家供大家参考,具体如下:

PHP

PHP;">
lunarInfo[$year-$this->MIN_YEAR];
    if($year==$this->MIN_YEAR&&$month<><=9) return="" array(1891,'正月','初一','辛卯','兔');="" return="" $this-="">getLunarByBetween($year,$this->getDaysBetweenSolar($year,$date,$yearData[1],$yearData[2]));
  }
  public function convertSolarMonthToLunar($year,'兔');
    $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 阴历-日
   */
  public 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
   */
  public function isLeapYear($year)
  {
    return (($year%4==0 && $year%100 !=0) || ($year%400==0));
  }
  /**
   * 获取干支纪年
   * @param year
   */
  public function getLunarYearName($year)
  {
    $sky = array('庚','辛','壬','癸','甲','乙','丙','丁','戊','己');
    $earth = array('申','酉','戌','亥','子','丑','寅','卯','辰','巳','午','未');
    $year = $year.'';
    return $sky[$year{3}].$earth[$year%12];
  }
  /**
   * 根据阴历年获取生肖
   * @param year 阴历年
   */
  public function getYearZodiac($year)
  {
    $zodiac = array('猴','鸡','狗','猪','鼠','牛','虎','兔','龙','蛇','马','羊');
    return $zodiac[$year%12];
  }
  /**
   * 获取阳历月份的天数
   * @param year 阳历-年
   * @param month 阳历-月
   */
  public 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 阴历-月,从一月开始
   */
  public function getLunarMonthDays($year,$month)
  {
    $monthData = $this->getLunarMonths($year);
    return $monthData[$month-1];
  }
  /**
   * 获取阴历每月的天数的数组
   * @param year
   */
  public 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=""><$klen;$k++) array_unshift($bitarray,'0');="" $bitarray="array_slice($bitArray,($leapMonth==0?12:13));" for($i="0;">lunarInfo[$year-$this->MIN_YEAR];
    $monthArray = $this->getLunarYearMonths($year);
    $len = count($monthArray);
    return ($monthArray[$len-1]==0?$monthArray[$len-2]:$monthArray[$len-1]);
  }
  public function getLunarYearMonths($year)
  {
    $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=""><=$i;$j++) $temp+="$monthData[$j];" array_push($res,$temp);="" }="" return="" $res;="" }="" *="" *="" 获取闰月="" *="" @param="" year="" 阴历年份="" */="" public="" function="" getleapmonth($year)="" {="" $yeardata="$this-">lunarInfo[$year-$this->MIN_YEAR];
    return $yearData[0];
  }
  /**
   * 计算阴历日期与正月初一相隔的天数
   * @param year
   * @param month
   * @param date
   */
  public function getDaysBetweenLunar($year,$date)
  {
    $yearMonth = $this->getLunarMonths($year);
    $res=0;
    for($i=1;$i<$month;$i++) $res="" +="$yearMonth[$i-1];" $res+="$date-1;" return="" $res;="" }="" *="" *="" 计算2个阳历日期之间的天数="" *="" @param="" year="" 阳历年="" *="" @param="" cmonth="" *="" @param="" cdate="" *="" @param="" dmonth="" 阴历正月对应的阳历月份="" *="" @param="" ddate="" 阴历初一对应的阳历天数="" */="" public="" function="" getdaysbetweensolar($year,$cmonth,$cdate,$dmonth,$ddate)="" {="" $a="mktime(0,$year);" $b="mktime(0,$ddate,$year);" return="" ceil(($a-$b)/24/3600);="" }="" *="" *="" 根据距离正月初一的天数计算阴历日期="" *="" @param="" year="" 阳历年="" *="" @param="" between="" 天数="" */="" public="" function="" getlunarbybetween($year,$between)="" {="" $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=""><$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,$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;
  }
  /**
   * 获取数字的阴历叫法
   * @param num 数字
   * @param isMonth 是否是月份的数字
   */
  public 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;="" }="" *="" *="" 节气通用算法="" */="" public="" function="" getjieqi($_year,$day)="" {="" $year="substr($_year,-2)+0;" $coefficient="array(" array(5.4055,2019,-1),//小寒="" array(20.12,2082,1),//大寒="" array(3.87),//立春="" array(18.74,2026,//雨水="" array(5.63),//惊蛰="" array(20.646,2084,//春分="" array(4.81),//清明="" array(20.1),//谷雨="" array(5.52,1911,//立夏="" array(21.04,2008,//小满="" array(5.678,1902,//芒种="" array(21.37,1928,//夏至="" array(7.108,2016,//小暑="" array(22.83,1922,//大暑="" array(7.5,2002,//立秋="" array(23.13),//处暑="" array(7.646,1927,//白露="" array(23.042,1942,//秋分="" array(8.318),//寒露="" array(23.438,2089,//霜降="" array(7.438,//立冬="" array(22.36,1978,//小雪="" array(7.18,1954,//大雪="" array(21.94,2021,-1)//冬至="" );="" $term_name="array(" "小寒","大寒","立春","雨水","惊蛰","春分","清明","谷雨","立夏","小满","芒种","夏至","小暑","大暑","立秋","处暑","白露","秋分","寒露","霜降","立冬","小雪","大雪","冬至");="" $idx1="($month-1)*2;" $_leap_value="floor(($year-1)/4);" $day1="floor($year*0.2422+$coefficient[$idx1][0])-$_leap_value;" if(isset($coefficient[$idx1][1])&&$coefficient[$idx1][1]="=$_year)" $day1="" +="$coefficient[$idx1][2];" $day2="floor($year*0.2422+$coefficient[$idx1+1][0])-$_leap_value;" if(isset($coefficient[$idx1+1][1])&&$coefficient[$idx1+1][1]="=$_year)" $day1="" +="$coefficient[$idx1+1][2];" if($day="=$day1)" return="" $term_name[$idx1];="" if($day="=$day2)" return="" $term_name[$idx1+1];="" return="" '';="" }="" *="" *="" 获取节日:特殊的节日只能修改此函数来计算="" */="" public="" 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@H_419_16@14)&&($d<22)&&($glweek==0))array_push($festivals,"父亲节"); $jieqi="$this-">getJieQi($y,$d);
    if($jieqi)array_push($festivals,$jieqi);
    return implode('/',$festivals);
  }
}

大佬总结

以上是大佬教程为你收集整理的PHP编程实现阳历转换为阴历的方法实例全部内容,希望文章能够帮你解决PHP编程实现阳历转换为阴历的方法实例所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: