php公历农历转换的实现方法:首先创建一个PHP示例文件,并设置该文件的编码为“utf-8”;然后引入“lunar.php”;接着通过“$lunar->convertSolarToLunar()”方法将公历转换为农历即可。

推荐:《PHP视频教程》

PHP实现阳历(新历)与阴历(农历)互相转换

使用方法:<?php

header("Content-Type:text/html;charset=utf-8");

require "lunar.php";

$lunar=new Lunar();

$month=$lunar--->convertSolarToLunar(2015,02,15);//将阳历转换为阴历

echo '

';

print_r($month);

?>

输出结果:Array

(

[0] => 2014

[1] => 腊月

[2] => 廿六

[3] => 甲午

[4] => 13

[5] => 26

[6] => 马

[7] => 9

)

class Lunar{

var $MIN_YEAR=1891;

var $MAX_YEAR=2100;

var $lunarInfo=array(

array(0,2,9,21936),array(6,1,30,9656),array(0,2,17,9584),array(0,2,6,21168),

array(5,1,26,43344),array(0,2,13,59728),array(0,2,2,27296),array(3,1,22,44368),

array(0,2,10,43856),array(8,1,30,19304),array(0,2,19,19168),array(0,2,8,42352),

array(5,1,29,21096),array(0,2,16,53856),array(0,2,4,55632),array(4,1,25,27304),

array(0,2,13,22176),array(0,2,2,39632),array(2,1,22,19176),array(0,2,10,19168),

array(6,1,30,42200),array(0,2,18,42192),array(0,2,6,53840),array(5,1,26,54568),

array(0,2,14,46400),array(0,2,3,54944),array(2,1,23,38608),array(0,2,11,38320),

array(7,2,1,18872),array(0,2,20,18800),array(0,2,8,42160),array(5,1,28,45656),

array(0,2,16,27216),array(0,2,5,27968),array(4,1,24,44456),array(0,2,13,11104),

array(0,2,2,38256),array(2,1,23,18808),array(0,2,10,18800),array(6,1,30,25776),

array(0,2,17,54432),array(0,2,6,59984),array(5,1,26,27976),array(0,2,14,23248),

array(0,2,4,11104),array(3,1,24,37744),array(0,2,11,37600),array(7,1,31,51560),

array(0,2,19,51536),array(0,2,8,54432),array(6,1,27,55888),array(0,2,15,46416),

array(0,2,5,22176),array(4,1,25,43736),array(0,2,13,9680),array(0,2,2,37584),

array(2,1,22,51544),array(0,2,10,43344),array(7,1,29,46248),array(0,2,17,27808),

array(0,2,6,46416),array(5,1,27,21928),array(0,2,14,19872),array(0,2,3,42416),

array(3,1,24,21176),array(0,2,12,21168),array(8,1,31,43344),array(0,2,18,59728),

array(0,2,8,27296),array(6,1,28,44368),array(0,2,15,43856),array(0,2,5,19296),

array(4,1,25,42352),array(0,2,13,42352),array(0,2,2,21088),array(3,1,21,59696),

array(0,2,9,55632),array(7,1,30,23208),array(0,2,17,22176),array(0,2,6,38608),

array(5,1,27,19176),array(0,2,15,19152),array(0,2,3,42192),array(4,1,23,53864),

array(0,2,11,53840),array(8,1,31,54568),array(0,2,18,46400),array(0,2,7,46752),

array(6,1,28,38608),array(0,2,16,38320),array(0,2,5,18864),array(4,1,25,42168),

array(0,2,13,42160),array(10,2,2,45656),array(0,2,20,27216),array(0,2,9,27968),

array(6,1,29,44448),array(0,2,17,43872),array(0,2,6,38256),array(5,1,27,18808),

array(0,2,15,18800),array(0,2,4,25776),array(3,1,23,27216),array(0,2,10,59984),

array(8,1,31,27432),array(0,2,19,23232),array(0,2,7,43872),array(5,1,28,37736),

array(0,2,16,37600),array(0,2,5,51552),array(4,1,24,54440),array(0,2,12,54432),

array(0,2,1,55888),array(2,1,22,23208),array(0,2,9,22176),array(7,1,29,43736),

array(0,2,18,9680),array(0,2,7,37584),array(5,1,26,51544),array(0,2,14,43344),

array(0,2,3,46240),array(4,1,23,46416),array(0,2,10,44368),array(9,1,31,21928),

array(0,2,19,19360),array(0,2,8,42416),array(6,1,28,21176),array(0,2,16,21168),

array(0,2,5,43312),array(4,1,25,29864),array(0,2,12,27296),array(0,2,1,44368),

array(2,1,22,19880),array(0,2,10,19296),array(6,1,29,42352),array(0,2,17,42208),

array(0,2,6,53856),array(5,1,26,59696),array(0,2,13,54576),array(0,2,3,23200),

array(3,1,23,27472),array(0,2,11,38608),array(11,1,31,19176),array(0,2,19,19152),

array(0,2,8,42192),array(6,1,28,53848),array(0,2,15,53840),array(0,2,4,54560),

array(5,1,24,55968),array(0,2,12,46496),array(0,2,1,22224),array(2,1,22,19160),

array(0,2,10,18864),array(7,1,30,42168),array(0,2,17,42160),array(0,2,6,43600),

array(5,1,26,46376),array(0,2,14,27936),array(0,2,2,44448),array(3,1,23,21936),

array(0,2,11,37744),array(8,2,1,18808),array(0,2,19,18800),array(0,2,8,25776),

array(6,1,28,27216),array(0,2,15,59984),array(0,2,4,27424),array(4,1,24,43872),

array(0,2,12,43744),array(0,2,2,37600),array(3,1,21,51568),array(0,2,9,51552),

array(7,1,29,54440),array(0,2,17,54432),array(0,2,5,55888),array(5,1,26,23208),

array(0,2,14,22176),array(0,2,3,42704),array(4,1,23,21224),array(0,2,11,21200),

array(8,1,31,43352),array(0,2,19,43344),array(0,2,7,46240),array(6,1,27,46416),

array(0,2,15,44368),array(0,2,5,21920),array(4,1,24,42448),array(0,2,12,42416),

array(0,2,2,21168),array(3,1,22,43320),array(0,2,9,26928),array(7,1,29,29336),

array(0,2,17,27296),array(0,2,6,44368),array(5,1,26,19880),array(0,2,14,19296),

array(0,2,3,42352),array(4,1,24,21104),array(0,2,10,53856),array(8,1,30,59696),

array(0,2,18,54560),array(0,2,7,55968),array(6,1,27,27472),array(0,2,15,22224),

array(0,2,5,19168),array(4,1,25,42216),array(0,2,12,42192),array(0,2,1,53584),

array(2,1,21,55592),array(0,2,9,54560)

);

/**

* 将阳历转换为阴历

* @param year 公历-年

* @param month 公历-月

* @param date 公历-日

*/

function convertSolarToLunar($year,$month,$date){//debugger;

$yearData=$this->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

$array=$this->getLunarByBetween($year,$this->getDaysBetweenSolar($year,$month,$i,$yearData[1],$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,$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);

}

/**

* 判断是否是闰年

* @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

$bitArray[$i]=substr($bit,$i,1);

}

for($k=0,$klen=16-count($bitArray);$k

array_unshift($bitArray,'0');

}

$bitArray=array_slice($bitArray,0,($leapMonth==0?12:13));

for($i=0;$i

$bitArray[$i]=$bitArray[$i] + 29;

}

return $bitArray;

}

/**

* 获取农历每年的天数

* @param year 农历年份

*/

function getLunarYearDays($year){

$yearData=$this->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]==0?12:13);

for($i=0;$i

$temp=0;

for($j=0;$j<=$i;$j++){

$temp+=$monthData[$j];

}

array_push($res,$temp);

}

return $res;

}

/**

* 获取闰月

* @param year 阴历年份

*/

function getLeapMonth($year){

$yearData=$this->lunarInfo[$year-$this->MIN_YEAR];

return $yearData[0];

}

/**

* 计算阴历日期与正月初一相隔的天数

* @param year http://www.codetc.com/

* @param month

* @param date

*/

function getDaysBetweenLunar($year,$month,$date){

$yearMonth=$this->getLunarMonths($year);

$res=0;

for($i=1;$i

$res+=$yearMonth[$i-1];

}

$res+=$date-1;

return $res;

}

/**

* 计算2个阳历日期之间的天数

* @param year 阳历年

* @param cmonth

* @param cdate

* @param dmonth 阴历正月对应的阳历月份

* @param ddate 阴历初一对应的阳历天数

*/

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);

}

/**

* 根据距离正月初一的天数计算阴历日期

* @param year 阳历年

* @param between 天数

*/

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

$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

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;

}

/**

* 获取数字的阴历叫法

* @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($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;

}

}

?>

php怎么将农历转换成公历,php 公历农历如何实现转换相关推荐

  1. kux格式怎么转换成mp4?简单快速的视频转换技巧分享

    现在生活压力越来越大,过完一天忙碌的工作回到家里开始煲剧是很多人的最爱.说到看视频,资源基本都被「三巨头」--腾讯视频.爱奇艺.优酷所覆盖,而有些朋友喜欢将视频下载下来看.可是却发现,下载的视频格式是 ...

  2. xml文件转换成图片_如何把pdf文件转换成图片?

    pdf文件怎么转成JPG图片呢?相信有不少人在迷惑,可能还在想着截图等操作来完成转换,但如果是截图成JPG图片后的效果可能很差,并没有之前pdf文件那么清楚.那这样往往打印出来的效果也不怎么理想,那怎 ...

  3. asp.net 将bmp格式图片怎么转换为jpg_PNG图片怎么转换成JPG?原来还可以这么转换...

    PNG和JPG的区别是,对于需要高保真的较复杂的图像,PNG虽然能无损压缩,但PNG与JPG相比,PNG格式的文件容量比较大,不适合日常的传播流通.如果需要上传的图片的网页不支持PNG格式的图片上传, ...

  4. android开发将h5转换成pdf_如何将PDF转换成图片?搞定PDF格式转换,就用这招就够了!...

    原标题:如何将PDF转换成图片?搞定PDF格式转换,就用这招就够了! 在我们日常学习和日常工作中,我们有时候会遇到要使用到PDF中某一部分的情况,这时候我们可以将PDF文件转成图片.有什么办法可以把P ...

  5. CAD怎么转换成PDF?如何将CAD批量转换成PDF?

    CAD文件是设计行业常常需要使用的图纸之一,我们在使用CAD图纸文件时,有时候需要将CAD图纸文件转换成PDF,那么CAD怎么转换成PDF?如何将CAD批量转换成PDF?通过这篇文章,我就来告诉大家应 ...

  6. 编写程序,判断一个字符是否为小写字母,如果是,将它转换成大写字母,否则,不转换。)

    package day991leftupquestion; /** 1.编写程序,判断一个字符是否为小写字母,如果是,将它转换成大写字母,否则,不转换. A=65 a=97 */ public cla ...

  7. 怎么将文件转换成linux文件,Linux将DOS文件格式转换成UNIX文件格式的方法

    dos格式文件传输到unix系统时,会在每行的结尾多一个^M,当然也 有可能看不到,但是在vi的时候,会在下面显示此文件的格式,比如 "dos.txt"[dos] 120L, 25 ...

  8. xsd文件转图片_图片转换成PDF格式怎么转?图片转换成PDF的软件哪个好?

    图片转换成PDF格式怎么转?经验丰富的设计师在完成图片格式的设计作品后都会将图片转成PDF格式文件,这样方便保存以及参加一些设计比赛.同时我们在保存大量图片的时候也可以将图片转换成PDF文件.但是还有 ...

  9. kux格式怎么转换成mp3_把MP3格式的音频转换成WAV格式

    有时候工作中我们在处理音频的过程中,需要转换音频的格式,以便于更好的使用.例如,可能会要求把MP3格式的音频转换成其他的音频格式.这时候如何解决是一个问题.今天我就和大家介绍好用的音频转换器,可以快速 ...

  10. java如何把png转换成jpg_Java实现将png格式图片转换成jpg格式图片的方法【测试可用】...

    Java实现将png格式图片转换成jpg格式图片的方法[测试可用] 发布于 2020-4-9| 复制链接 摘记: 本文实例讲述了Java实现将png格式图片转换成jpg格式图片的方法.分享给大家供大家 ...

最新文章

  1. 摸鱼神器来了!让你用QQ、微信的时候都像是在工作
  2. 解决冲突的拉链法探测的ASL
  3. Java基础23-集合类2(Set接口,Iterator迭代器)
  4. 心辽阔了,人生才能辽阔
  5. 在行列都排好序的矩阵中找数
  6. 修复:安装 CUDA9.0 Patch 1 时载入文件后闪退(cuda_9.0.176.1_windows.exe)
  7. VTK:二次可视化用法实战
  8. 8086CPU汇编:一般的标号与直接定址标号
  9. 物理设计-如何存储日期类型
  10. 【Python自然语言处理】中文分词技术——规则分词
  11. 改了上百遍!记上海交通大学第一篇《Science》
  12. 通过Server-U设置网络共享文件夹的步骤和注意事项
  13. TensorFlow2.0:数据统计
  14. springboot2源码1-SpringApplication实例化
  15. linux 相关命令
  16. 重磅消息,Redis开源作者宣布不再维护Redis项目!
  17. python函数知识七 闭包、装饰器一(入门)、装饰器二(进阶)
  18. mf4350d驱动下载linux,佳能 imageCLASS MF4350d 驱动程序下载-更新佳能软件(打印机)
  19. 如何制作扫描连接WIFI二维码,手机扫码即可一键连接无线WIFI网络
  20. 华为云服务查找手机_华为云服务登录入口

热门文章

  1. 当甲骨文思维遇上谷歌精神,谷歌云将走向何方?
  2. ZXECS-IBX1000综合业务交换
  3. HTK安装实录(Ubuntu18.04)
  4. java macd_MACD到底是什么?
  5. excel 中行数据向下移动一行的方法
  6. webflux+r2dbc 实现响应式导出csv格式文件
  7. linux常用cat,Linux常用操作命令之cat
  8. ios 旋转屏幕试图切换_iOS播放器横竖屏切换的实现
  9. python画海绵宝宝代码_Python_Turtle库画一只派大星
  10. ubuntu20.04安装谷歌输入法命令