我们在PHP开发项目的时候,有时候需要阳历阴历互相转换,下面就让爱站技术频道小编带大家一起来看看php.html" target="_blank">php实现阳历阴历互转的方法介绍,希望对你学习这方面知识有所帮助。

具体类代码如下:

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

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

}

}

使用方法如下:

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

$lunar=new Lunar();

$month=$lunar->convertSolarToLunar(2013,07,08);//将阳历转换为阴历

echo '

';

print_r($month);

打印结果如下:

Array

(

??? [0] => 2013

??? [1] => 五月

??? [2] => 三十

??? [3] => 癸巳

??? [4] => 5

??? [5] => 30

??? [6] => 蛇

??? [7] => 0

)

以上就是爱站技术频道小编为大家总结的php实现阳历阴历互转的方法,相信大家已经记住了,我们在爱站技术频道还整理了更多专业知识,请大家继续支持我们!

原文链接:https://js.aizhan.com/develop/php/10545.html

如有疑问请与原作者联系

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com

特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

php怎么将农历转换成公历,php实现阳历阴历互转的方法相关推荐

  1. wkhtmltopdf:wkhtmltopdf(将html转换成pdf的利器)简介、安装、使用方法详细攻略

    wkhtmltopdf:wkhtmltopdf(将html转换成pdf的利器)简介.安装.使用方法详细攻略 目录 wkhtmltopdf简介 wkhtmltopdf安装 wkhtmltopdf使用方法 ...

  2. Java黑皮书课后题第6章:**6.25(将毫秒转化成小时、分钟、秒数)使用下面的方法头,编写一个将毫秒数转换成小时数、分钟数和描述的方法,返回形式如“小时:分钟:秒“

    6.25(将毫秒转化成小时.分钟.秒数)使用下面的方法头,编写一个将毫秒数转换成小时数.分钟数和描述的方法,返回形式如"小时:分钟:秒" 题目 题目描述 破题 代码 运行实例 题目 ...

  3. 为什么复制粘贴格式总是出错_想把图片转换成pdf格式怎么做?你找对方法了吗...

    在工作中,总是会遇到各式各样的文件格式问题,例如昨天客户要的是PDF版本,我却做成了图片格式,现在只有把图片转换成PDF格式了,关键是几十张的长图,转换起来会不会很麻烦?其实只要找对了方法,就能很轻松 ...

  4. qt5 传输 图片压缩_图片如何转换成pdf?免费教你几个宝藏方法,请低调使用!...

    图片如何转换成pdf?很多人在传输图片的时候都喜欢直接打包文件将其压缩再传送,其实这样并不方便他人查看,并且受到压缩/解压缩工具的限制,很可能对方压根无法查看收到的图片.建议大家可以尝试把图片转换为P ...

  5. 如何将CAJ文件转换成PDF格式?分享两种实用的方法

    CAJ是一种特定的文献格式,通常用于中国学术期刊和学位论文等.在学习生活中我们查阅一些文献资料,一些权威文献报刊通常情况下都是CAJ文件格式,打开它需要使用专业的阅读工具 ,这时候就需要将它转换成PD ...

  6. 怎么把手机计算机开启语音,怎么把文字转换成语音,电脑端和手机端的方法,都在这里了...

    原标题:怎么把文字转换成语音,电脑端和手机端的方法,都在这里了 平时在生活中,是不是有时候会没空可以看文件,看新闻,又或者眼睛有点酸,不想看手机电脑?又或者是需要配音,怕自己的声音不好听不好意思配?这 ...

  7. ABAP实现农历转成公历

    一个牛逼到渣的程序. *因为要加很多的数据,所以用宏来添加算了 DEFINE ADD_TABLE .   &1-NAME = &2 .   APPEND &1 . END-OF ...

  8. mysql将公历农历转换_php 公历农历如何实现转换

    php公历农历转换的实现方法:首先创建一个PHP示例文件,并设置该文件的编码为"utf-8":然后引入"lunar.php":接着通过"$lunar- ...

  9. JS农历公历互转 阳历阴历互转

    参考https://blog.jjonline.cn/userInterFace/173.html 测试: //农历转公var str = "1990-12-29";var res ...

  10. h5在线浏览word_怎样将PDF在线转换成Word?教你成为一个高手的方法

    在我们的日常生活工作学习中,是很需要的Office办公软件的.不过我们经常使用的还是PDF格式的文件.但是如果我们想在PDF文件上再编辑文字时,就要把PDF转换成Word格式再编辑.在线PDF转换成W ...

最新文章

  1. 使用idea2.5建立maven项目
  2. c++设置单元格填充色_更改数据后单元格自动填充颜色,从此以后再也不用核对数据了...
  3. 业务逻辑实现方式选择
  4. 前端学习(1998)vue之电商管理系统电商系统之实现步骤条和tab栏的数据
  5. STL之Map完整(Linux内核)内部实现
  6. GP学习(七)—Accessing raster workspaces
  7. ((ios开发学习笔记 十二))Nib加载的方式实现自定义TableView
  8. 使用GifCam软件录制gif动图
  9. 微信小程序的事件大全
  10. Seaweedfs 详细说明
  11. 拼多多的砍价免费拿是真的吗?
  12. Android开发之用户头像上传
  13. ARP代理(Proxy ARP)
  14. 2020最新微信棋牌游戏H5域名防封的解决方案
  15. 【Basic】SVM(支持向量机)分类算法
  16. 富士通代理Quad SPI铁电FRAM存储器MB85RQ4M
  17. Autocad的快捷键
  18. 惠普电脑诉讼门:矛盾的数字 背后的秘密
  19. 【渝粤题库】广东开放大学 形成性考核 - 副本 (13)
  20. [转载]VB网络聊天程序的开发(1)

热门文章

  1. 体验为王-2021友盟+移动性能优化比赛第一名作品
  2. 数据分析师的就业薪资
  3. 什么是用户价值分层?
  4. 微信js支付换服务器,微信内网页支付(微信 JSAPI 支付)的一点经验
  5. Apple Push Notification service
  6. extension(扩展)使用详情
  7. 美文听力:别错过机会
  8. ubuntu串口助手推荐——comtool
  9. 如何撰写高水平的博士论文?
  10. 日常工作记录---在虚拟机中进行slam建图