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 如何向 MySQL 发送数据
Oct 09 PHP
php带密码功能并下载远程文件保存本地指定目录 修改加强版
May 16 PHP
PHP实现根据浏览器跳转不同语言页面代码
Aug 02 PHP
如何使用php输出时间格式
Aug 31 PHP
php实现在线生成条形码示例分享(条形码生成器)
Dec 30 PHP
php中require和require_once的区别说明
Feb 27 PHP
PHP5.5在windows安装使用memcached服务端的方法
Apr 16 PHP
PHP实现利用MySQL保存session的方法
Aug 23 PHP
使用PHP生成二维码的方法汇总
Jul 22 PHP
Symfony的安装和配置方法
Mar 17 PHP
PHP实现的解汉诺塔问题算法示例
Aug 06 PHP
PHP7 字符串处理机制修改
Mar 09 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编程实现获取excel文档内容的代码实例
2011/06/28 PHP
PHP 返回13位时间戳的实现代码
2016/05/13 PHP
关于图片按比例自适应缩放的js代码
2011/10/30 Javascript
jquery实现checkbox 全选/全不选的通用写法
2014/02/22 Javascript
JavaScript开发人员的10个关键习惯小结
2014/12/05 Javascript
jQuery实现简单的列表式导航菜单效果代码
2015/08/31 Javascript
js实现仿爱微网两级导航菜单效果代码
2015/08/31 Javascript
深入浅析JavaScript的API设计原则
2016/06/14 Javascript
bootstrap组件之按钮式下拉菜单小结
2017/01/19 Javascript
JavaScript数组复制详解
2017/02/02 Javascript
基于JavaScript实现的希尔排序算法分析
2017/04/14 Javascript
JS实现浏览上传文件的代码
2017/08/23 Javascript
vue.js移动数组位置,同时更新视图的方法
2018/03/08 Javascript
create-react-app使用antd按需加载的样式无效问题的解决
2019/02/26 Javascript
[01:14:19]NAVI vs Mineski 2019国际邀请赛淘汰赛 败者组BO1 8.20.mp4
2020/07/19 DOTA
Python自定义函数的创建、调用和函数的参数详解
2014/03/11 Python
Python实现登录人人网并抓取新鲜事的方法
2015/05/11 Python
在Python中使用next()方法操作文件的教程
2015/05/24 Python
浅谈Python中的闭包
2015/07/08 Python
Python中常用信号signal类型实例
2018/01/25 Python
python 在某.py文件中调用其他.py内的函数的方法
2019/06/25 Python
Python GUI编程学习笔记之tkinter界面布局显示详解
2020/03/30 Python
python3通过udp实现组播数据的发送和接收操作
2020/05/05 Python
终于搞懂了Keras中multiloss的对应关系介绍
2020/06/22 Python
利用python汇总统计多张Excel
2020/09/22 Python
python 写一个性能测试工具(一)
2020/10/24 Python
真正了解CSS3背景下的@font face规则
2017/05/04 HTML / CSS
纽约通行卡:The New York Pass(免费游览纽约90多个景点)
2017/07/29 全球购物
美国半成品食材配送服务商:Home Chef
2018/01/25 全球购物
英国顶级水晶珠宝零售商之一:Tresor Paris
2019/04/27 全球购物
Clarks其乐鞋荷兰官网:Clarks荷兰
2019/07/05 全球购物
感恩小明星事迹材料
2014/05/23 职场文书
学生不讲诚信检讨书
2014/09/29 职场文书
公务员年度考核评语
2014/12/31 职场文书
多属性、多分类MySQL模式设计
2021/04/05 MySQL
Python一些基本的图像操作和处理总结
2021/06/23 Python