PHP实现阳历到农历转换的类实例


Posted in PHP onMarch 07, 2015

本文实例讲述了PHP实现阳历到农历转换的类。分享给大家供大家参考。具体如下:

<?php

//PHP阳历到农历转换的一个类

class Calendar

{

//农历每月的天数

    var $everyCMonth=array(

    0=>array(8,0,0,0,0,0,0,0,0,0,0,0,29,30,7,1),

    1=>array(0,29,30,29,29,30,29,30,29,30,30,30,29,0,8,2),

    2=>array(0,30,29,30,29,29,30,29,30,29,30,30,30,0,9,3),

    3=>array(5,29,30,29,30,29,29,30,29,29,30,30,29,30,10,4),

    4=>array(0,30,30,29,30,29,29,30,29,29,30,30,29,0,1,5),

    5=>array(0,30,30,29,30,30,29,29,30,29,30,29,30,0,2,6),

    6=>array(4,29,30,30,29,30,29,30,29,30,29,30,29,30,3,7),

    7=>array(0,29,30,29,30,29,30,30,29,30,29,30,29,0,4,8),

    8=>array(0,30,29,29,30,30,29,30,29,30,30,29,30,0,5,9),

    9=>array(2,29,30,29,29,30,29,30,29,30,30,30,29,30,6,10),

    10=>array(0,29,30,29,29,30,29,30,29,30,30,30,29,0,7,11),

    11=>array(6,30,29,30,29,29,30,29,29,30,30,29,30,30,8,12),

    12=>array(0,30,29,30,29,29,30,29,29,30,30,29,30,0,9,1),

    13=>array(0,30,30,29,30,29,29,30,29,29,30,29,30,0,10,2),

    14=>array(5,30,30,29,30,29,30,29,30,29,30,29,29,30,1,3),

    15=>array(0,30,29,30,30,29,30,29,30,29,30,29,30,0,2,4),

    16=>array(0,29,30,29,30,29,30,30,29,30,29,30,29,0,3,5),

    17=>array(2,30,29,29,30,29,30,30,29,30,30,29,30,29,4,6),

    18=>array(0,30,29,29,30,29,30,29,30,30,29,30,30,0,5,7),

    19=>array(7,29,30,29,29,30,29,29,30,30,29,30,30,30,6,8),

    20=>array(0,29,30,29,29,30,29,29,30,30,29,30,30,0,7,9),

    21=>array(0,30,29,30,29,29,30,29,29,30,29,30,30,0,8,10),

    22=>array(5,30,29,30,30,29,29,30,29,29,30,29,30,30,9,11),

    23=>array(0,29,30,30,29,30,29,30,29,29,30,29,30,0,10,12),

    24=>array(0,29,30,30,29,30,30,29,30,29,30,29,29,0,1,1),

    25=>array(4,30,29,30,29,30,30,29,30,30,29,30,29,30,2,2),

    26=>array(0,29,29,30,29,30,29,30,30,29,30,30,29,0,3,3),

    27=>array(0,30,29,29,30,29,30,29,30,29,30,30,30,0,4,4),

    28=>array(2,29,30,29,29,30,29,29,30,29,30,30,30,30,5,5),

    29=>array(0,29,30,29,29,30,29,29,30,29,30,30,30,0,6,6),

    30=>array(6,29,30,30,29,29,30,29,29,30,29,30,30,29,7,7),

    31=>array(0,30,30,29,30,29,30,29,29,30,29,30,29,0,8,8),

    32=>array(0,30,30,30,29,30,29,30,29,29,30,29,30,0,9,9),

    33=>array(5,29,30,30,29,30,30,29,30,29,30,29,29,30,10,10),

    34=>array(0,29,30,29,30,30,29,30,29,30,30,29,30,0,1,11),

    35=>array(0,29,29,30,29,30,29,30,30,29,30,30,29,0,2,12),

    36=>array(3,30,29,29,30,29,29,30,30,29,30,30,30,29,3,1),

    37=>array(0,30,29,29,30,29,29,30,29,30,30,30,29,0,4,2),

    38=>array(7,30,30,29,29,30,29,29,30,29,30,30,29,30,5,3),

    39=>array(0,30,30,29,29,30,29,29,30,29,30,29,30,0,6,4),

    40=>array(0,30,30,29,30,29,30,29,29,30,29,30,29,0,7,5),

    41=>array(6,30,30,29,30,30,29,30,29,29,30,29,30,29,8,6),

    42=>array(0,30,29,30,30,29,30,29,30,29,30,29,30,0,9,7),

    43=>array(0,29,30,29,30,29,30,30,29,30,29,30,29,0,10,8),

    44=>array(4,30,29,30,29,30,29,30,29,30,30,29,30,30,1,9),

    45=>array(0,29,29,30,29,29,30,29,30,30,30,29,30,0,2,10),

    46=>array(0,30,29,29,30,29,29,30,29,30,30,29,30,0,3,11),

    47=>array(2,30,30,29,29,30,29,29,30,29,30,29,30,30,4,12),

    48=>array(0,30,29,30,29,30,29,29,30,29,30,29,30,0,5,1),

    49=>array(7,30,29,30,30,29,30,29,29,30,29,30,29,30,6,2),

    50=>array(0,29,30,30,29,30,30,29,29,30,29,30,29,0,7,3),

    51=>array(0,30,29,30,30,29,30,29,30,29,30,29,30,0,8,4),

    52=>array(5,29,30,29,30,29,30,29,30,30,29,30,29,30,9,5),

    53=>array(0,29,30,29,29,30,30,29,30,30,29,30,29,0,10,6),

    54=>array(0,30,29,30,29,29,30,29,30,30,29,30,30,0,1,7),

    55=>array(3,29,30,29,30,29,29,30,29,30,29,30,30,30,2,8),

    56=>array(0,29,30,29,30,29,29,30,29,30,29,30,30,0,3,9),

    57=>array(8,30,29,30,29,30,29,29,30,29,30,29,30,29,4,10),

    58=>array(0,30,30,30,29,30,29,29,30,29,30,29,30,0,5,11),

    59=>array(0,29,30,30,29,30,29,30,29,30,29,30,29,0,6,12),

    60=>array(6,30,29,30,29,30,30,29,30,29,30,29,30,29,7,1),

    61=>array(0,30,29,30,29,30,29,30,30,29,30,29,30,0,8,2),

    62=>array(0,29,30,29,29,30,29,30,30,29,30,30,29,0,9,3),

    63=>array(4,30,29,30,29,29,30,29,30,29,30,30,30,29,10,4),

    64=>array(0,30,29,30,29,29,30,29,30,29,30,30,30,0,1,5),

    65=>array(0,29,30,29,30,29,29,30,29,29,30,30,29,0,2,6),

    66=>array(3,30,30,30,29,30,29,29,30,29,29,30,30,29,3,7),

    67=>array(0,30,30,29,30,30,29,29,30,29,30,29,30,0,4,8),

    68=>array(7,29,30,29,30,30,29,30,29,30,29,30,29,30,5,9),

    69=>array(0,29,30,29,30,29,30,30,29,30,29,30,29,0,6,10),

    70=>array(0,30,29,29,30,29,30,30,29,30,30,29,30,0,7,11),

    71=>array(5,29,30,29,29,30,29,30,29,30,30,30,29,30,8,12),

    72=>array(0,29,30,29,29,30,29,30,29,30,30,29,30,0,9,1),

    73=>array(0,30,29,30,29,29,30,29,29,30,30,29,30,0,10,2),

    74=>array(4,30,30,29,30,29,29,30,29,29,30,30,29,30,1,3),

    75=>array(0,30,30,29,30,29,29,30,29,29,30,29,30,0,2,4),

    76=>array(8,30,30,29,30,29,30,29,30,29,29,30,29,30,3,5),

    77=>array(0,30,29,30,30,29,30,29,30,29,30,29,29,0,4,6),

    78=>array(0,30,29,30,30,29,30,30,29,30,29,30,29,0,5,7),

    79=>array(6,30,29,29,30,29,30,30,29,30,30,29,30,29,6,8),

    80=>array(0,30,29,29,30,29,30,29,30,30,29,30,30,0,7,9),

    81=>array(0,29,30,29,29,30,29,29,30,30,29,30,30,0,8,10),

    82=>array(4,30,29,30,29,29,30,29,29,30,29,30,30,30,9,11),

    83=>array(0,30,29,30,29,29,30,29,29,30,29,30,30,0,10,12),

    84=>array(10,30,29,30,30,29,29,30,29,29,30,29,30,30,1,1),

    85=>array(0,29,30,30,29,30,29,30,29,29,30,29,30,0,2,2),

    86=>array(0,29,30,30,29,30,30,29,30,29,30,29,29,0,3,3),

    87=>array(6,30,29,30,29,30,30,29,30,30,29,30,29,29,4,4),

    88=>array(0,30,29,30,29,30,29,30,30,29,30,30,29,0,5,5),

    89=>array(0,30,29,29,30,29,29,30,30,29,30,30,30,0,6,6),

    90=>array(5,29,30,29,29,30,29,29,30,29,30,30,30,30,7,7),

    91=>array(0,29,30,29,29,30,29,29,30,29,30,30,30,0,8,8),

    92=>array(0,29,30,30,29,29,30,29,29,30,29,30,30,0,9,9),

    93=>array(3,29,30,30,29,30,29,30,29,29,30,29,30,29,10,10),

    94=>array(0,30,30,30,29,30,29,30,29,29,30,29,30,0,1,11),

    95=>array(8,29,30,30,29,30,29,30,30,29,29,30,29,30,2,12),

    96=>array(0,29,30,29,30,30,29,30,29,30,30,29,29,0,3,1),

    97=>array(0,30,29,30,29,30,29,30,30,29,30,30,29,0,4,2),

    98=>array(5,30,29,29,30,29,29,30,30,29,30,30,29,30,5,3),

    99=>array(0,30,29,29,30,29,29,30,29,30,30,30,29,0,6,4),

    100=>array(0,30,30,29,29,30,29,29,30,29,30,30,29,0,7,5),

    101=>array(4,30,30,29,30,29,30,29,29,30,29,30,29,30,8,6),

    102=>array(0,30,30,29,30,29,30,29,29,30,29,30,29,0,9,7),

    103=>array(0,30,30,29,30,30,29,30,29,29,30,29,30,0,10,8),

    104=>array(2,29,30,29,30,30,29,30,29,30,29,30,29,30,1,9),

    105=>array(0,29,30,29,30,29,30,30,29,30,29,30,29,0,2,10),

    106=>array(7,30,29,30,29,30,29,30,29,30,30,29,30,30,3,11),

    107=>array(0,29,29,30,29,29,30,29,30,30,30,29,30,0,4,12),

    108=>array(0,30,29,29,30,29,29,30,29,30,30,29,30,0,5,1),

    109=>array(5,30,30,29,29,30,29,29,30,29,30,29,30,30,6,2),

    110=>array(0,30,29,30,29,30,29,29,30,29,30,29,30,0,7,3),

    111=>array(0,30,29,30,30,29,30,29,29,30,29,30,29,0,8,4),

    112=>array(4,30,29,30,30,29,30,29,30,29,30,29,30,29,9,5),

    113=>array(0,30,29,30,29,30,30,29,30,29,30,29,30,0,10,6),

    114=>array(9,29,30,29,30,29,30,29,30,30,29,30,29,30,1,7),

    115=>array(0,29,30,29,29,30,29,30,30,30,29,30,29,0,2,8),

    116=>array(0,30,29,30,29,29,30,29,30,30,29,30,30,0,3,9),

    117=>array(6,29,30,29,30,29,29,30,29,30,29,30,30,30,4,10),

    118=>array(0,29,30,29,30,29,29,30,29,30,29,30,30,0,5,11),

    119=>array(0,30,29,30,29,30,29,29,30,29,29,30,30,0,6,12),

    120=>array(4,29,30,30,30,29,30,29,29,30,29,30,29,30,7,1)

    );

//农历天干

    var $mten=array("null","甲","乙","丙","丁","戊","己","庚","辛","壬","癸");    //农历地支

    var $mtwelve=array("null","子(鼠)","丑(牛)","寅(虎)","卯(兔)","辰(龙)",

                   "巳(蛇)","午(马)","未(羊)","申(猴)","酉(鸡)","戌(狗)","亥(猪)");    //农历月份

    var $mmonth=array("闰","正","二","三","四","五","六",

                  "七","八","九","十","十一","十二","月");

    var $mday=array("null","初一","初二","初三","初四","初五","初六","初七","初八","初九","初十",

                "十一","十二","十三","十四","十五","十六","十七","十八","十九","二十",

                "廿一","廿二","廿三","廿四","廿五","廿六","廿七","廿八","廿九","三十");//农历日

//赋给初值

//天干地支

    var $ten=0;

    var $twelve=0;

    function MyPub($cYear,$cMonth,$cDay)

    {

        $total=11;//阳历总天数 至1900年12月21日   

        $mtotal=0;//阴历总天数

        for ($y=1901;$y<$cYear;$y++)

        {

            $total+=365;

            if ($y%4==0) $total ++;

        }

        //再加当年的几个月

        switch ($cMonth){

                 case 12:

                      $total+=30;

                 case 11:

                      $total+=31;

                 case 10:

                      $total+=30;

                 case 9:

                      $total+=31;

                 case 8:

                      $total+=31;

                 case 7:

                      $total+=30;

                 case 6:

                      $total+=31;

                 case 5:

                      $total+=30;

                 case 4:

                      $total+=31;

                 case 3:

                      $total+=28;

                 case 2:

                      $total+=31;

               }

 

            //如果当年是闰年还要加一天

            if ($cYear%4==0 and $cMonth>2)

            {

                $total++;

            }

            $total+=$cDay-1;

            //用农历的天数累加来判断是否超过阳历的天数

            for($j=0;$j<=120;$j++)

            {

                $i=1;

                for($i=1;$i<=13;$i++)

                {

                    $mtotal+=$this->everyCMonth[$j][$i];

                    if ($mtotal>=$total)

                    {

                        $flag=1;

                        break;

                    }

                }

                if ($flag==1)break;

            }

                    return array("m"=>$j,"d"=>$i,"t"=>$total,"n"=>$mtotal);

    }

    function Cal($Year,$Month,$Day)

    {

        $Par=$this->MyPub($Year,$Month,$Day);

 

        $md=$this->everyCMonth[$Par["m"]][$Par["d"]]-($Par["n"]-$Par["t"]);

        $week=($Par["t"]+5)%7;

        if ($this->everyCMonth[$Par["m"]][0]<>0 and $this->everyCMonth[$Par["m"]][0]<$Par["d"])

        {

                $mm=$Par["d"]-1;

        }else{

                $mm=$Par["d"];

        }

        if ($Par["d"]==$this->everyCMonth[$Par["d"]][0]+1 and $this->everyCMonth[$Par["d"]][0]<>0)

        {

            $cMonth=$this->mmonth[0].$this->mmonth[$mm];//闰月

        }else{

            $cMonth=$this->mmonth[$mm].$this->mmonth[13];

        }

        return array("year"=>$this->mten[$this->everyCMonth[$Par["m"]][14]].$this->mtwelve[$this->everyCMonth[$Par["m"]][15]],

                    "month"=>$cMonth,

                    "day"=>$this->mday[$md],

                    "week"=>$week);

    }

}

/////调用

$test=new Calendar;

$Year=$test->Cal(2004,2,20);

echo $Year["year"]."年".$Year["month"].$Year["day"]."周".$Year["week"];

?>

希望本文所述对大家的php程序设计有所帮助。

PHP 相关文章推荐
PHP 5昨天隆重推出--PHP 5/Zend Engine 2.0新特性
Oct 09 PHP
mysq GBKl乱码
Nov 28 PHP
php数组对百万数据进行排除重复数据的实现代码
Jun 08 PHP
Erlang的运算符(比较运算符,数值运算符,移位运算符,逻辑运算符)
Jul 23 PHP
PHP页面间参数传递的四种方法详解
Jun 09 PHP
浅析PHP的ASCII码转换类
Jul 05 PHP
百度站点地图(百度sitemap)生成方法分享
Jan 09 PHP
简单的php新闻发布系统教程
May 09 PHP
解决ThinkPHP关闭调试模式时报错的问题汇总
Apr 22 PHP
PHP将二维数组某一个字段相同的数组合并起来的方法
Feb 26 PHP
PhpStorm terminal无法输入命令的解决方法
Oct 09 PHP
PHP+Apache实现二级域名之间共享cookie的方法
Jul 24 PHP
Laravel 5 学习笔记
Mar 06 #PHP
ThinkPHP3.2.2的插件控制器功能
Mar 05 #PHP
ThinkPHP3.2.3数据库设置新特性
Mar 05 #PHP
ThinkPHP 3.2 版本升级了哪些内容
Mar 05 #PHP
thinkPHP学习笔记之安装配置篇
Mar 05 #PHP
PHP判断浏览器、判断语言代码分享
Mar 05 #PHP
Php-Redis安装测试笔记
Mar 05 #PHP
You might like
php入门学习知识点八 PHP中for循环基本应用之九九乘法口绝表
2011/07/14 PHP
php学习之function的用法
2012/07/14 PHP
php function用法如何递归及return和echo区别
2014/03/07 PHP
PHP中的命名空间相关概念浅析
2015/01/22 PHP
PHP生成唯一订单号
2015/07/05 PHP
支付宝服务窗API接口开发php版本
2016/07/20 PHP
关于php 高并发解决的一点思路
2017/04/16 PHP
php 浮点数比较方法详解
2017/05/05 PHP
Laravel创建数据库表结构的例子
2019/10/09 PHP
jQuery入门问答 整理的几个常见的初学者问题
2010/02/22 Javascript
JavaScript学习点滴 call、apply的区别
2010/10/22 Javascript
解析Javascript中难以理解的11个问题
2013/12/09 Javascript
JavaScript父子窗体间的调用方法
2015/03/31 Javascript
js实现跨域的4种实用方法原理分析
2015/10/29 Javascript
基于JavaScript实现简单的随机抽奖小程序
2016/01/05 Javascript
JavaScript 节流函数 Throttle 详解
2016/07/04 Javascript
jquery easyui validatebox remote的使用详解
2016/11/09 Javascript
使用Angular CLI生成路由的方法
2018/03/24 Javascript
微信小程序tabbar底部导航
2018/11/05 Javascript
微信小程序 生成携带参数的二维码
2019/10/23 Javascript
简述Python中的进程、线程、协程
2016/03/18 Python
python交互式图形编程实例(二)
2017/11/17 Python
python调用摄像头显示图像的实例
2018/08/03 Python
python实现微信防撤回神器
2019/04/29 Python
css3 利用transform打造走动的2D时钟
2020/10/20 HTML / CSS
英国的领先快速时尚零售商:In The Style
2019/03/25 全球购物
八年级语文教学反思
2014/02/11 职场文书
《理想》教学反思
2014/02/17 职场文书
毕业生就业协议书
2014/04/11 职场文书
有限责任公司股东合作协议书
2014/12/02 职场文书
2014年财务经理工作总结
2014/12/08 职场文书
小学教师先进事迹材料
2014/12/15 职场文书
经理助理岗位职责
2015/02/02 职场文书
2015年入党积极分子培养考察意见
2015/08/12 职场文书
导游词之秦始皇兵马俑博物馆
2019/09/29 职场文书
JavaScript继承的三种方法实例
2021/05/12 Javascript