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 获取客户端的真实ip
Nov 30 PHP
PHP调用Linux的命令行执行文件压缩命令
Jan 27 PHP
Thinkphp中的volist标签用法简介
Jun 18 PHP
phpword插件导出word文件时中文乱码问题处理方案
Aug 19 PHP
php返回json数据函数实例
Oct 09 PHP
非常重要的php正则表达式详解
Jan 04 PHP
PHP中多线程的两个实现方法
Oct 14 PHP
php-fpm添加service服务的例子
Apr 27 PHP
PHP CURL使用详解
Mar 21 PHP
Laravel框架验证码类用法实例分析
Sep 11 PHP
yii 框架实现按天,月,年,自定义时间段统计数据的方法分析
Apr 04 PHP
如何用Laravel包含你自己的帮助函数
May 27 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
当海贼王变成JOJO风
2020/03/02 日漫
PHP的Yii框架的基本使用示例
2015/08/21 PHP
PHP 实现 WebSocket 协议原理与应用详解
2020/04/22 PHP
关于viewport,Ext.panel和Ext.form.panel的关系
2009/05/07 Javascript
document.body.scrollTop 值总为0的解决方法 比较常见的标准问题
2009/11/30 Javascript
jQuery实现的Email中的收件人效果(按del键删除)
2011/03/20 Javascript
jQuery的attr与prop使用介绍
2013/10/10 Javascript
jquery 实现返回顶部功能
2014/11/17 Javascript
jQuery中empty()方法用法实例
2015/01/16 Javascript
jQuery制作仿Mac Lion OS滚动条效果
2015/02/10 Javascript
bootstrap的3级菜单样式,支持母版页保留打开状态实现方法
2016/11/10 Javascript
详谈jQuery unbind 删除绑定事件 / 移除标签方法
2017/03/02 Javascript
前端跨域的几种解决方式总结(推荐)
2017/08/16 Javascript
在iFrame子页面里实现模态框的方法
2018/08/17 Javascript
浅谈angularJs函数的使用方法(大小写转换,拷贝,扩充对象)
2018/10/08 Javascript
Vue插件从封装到发布的完整步骤记录
2019/02/28 Javascript
vue使用swiper.js重叠轮播组建样式
2019/11/14 Javascript
javascript实现移动端红包雨页面
2020/06/23 Javascript
[57:53]Secret vs Pain 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
简单介绍Python中的JSON使用
2015/04/28 Python
深入理解Python3中的http.client模块
2017/03/29 Python
python实现rsa加密实例详解
2017/07/19 Python
Python cookbook(数据结构与算法)同时对数据做转换和换算处理操作示例
2018/03/23 Python
python二维列表一维列表的互相转换实例
2018/07/02 Python
python生成每日报表数据(Excel)并邮件发送的实例
2019/02/03 Python
pytorch中torch.max和Tensor.view函数用法详解
2020/01/03 Python
使用Python实现牛顿法求极值
2020/02/10 Python
社会治安综合治理管理责任书
2014/04/16 职场文书
消防志愿者活动方案
2014/08/23 职场文书
新党章心得体会
2014/09/04 职场文书
玩手机检讨书1000字
2014/10/20 职场文书
python控制台打印log输出重复的解决方法
2021/05/14 Python
从np.random.normal()到正态分布的拟合操作
2021/06/02 Python
vue响应式原理与双向数据的深入解析
2021/06/04 Vue.js
Windows11性能真的上涨35%? 桌面酷睿i9实测结果公开
2021/11/21 数码科技
Java Spring Boot 正确读取配置文件中的属性的值
2022/04/20 Java/Android