当前位置: 首页 > 编程笔记 >

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

沈博涉
2023-03-14
本文向大家介绍PHP实现阳历到农历转换的类实例,包括了PHP实现阳历到农历转换的类实例的使用技巧和注意事项,需要的朋友参考一下

本文实例讲述了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程序设计有所帮助。

 类似资料:
  • 本文向大家介绍Shell脚本实现的阳历转农历代码分享,包括了Shell脚本实现的阳历转农历代码分享的使用技巧和注意事项,需要的朋友参考一下 闲来无事,想在Linux下用shell写一个阳历转农历的脚本,断断续续大概一个星期终于搞定。现在拿出来与大家分享。 1、缘由 本脚本实现原理是查表法(因为公式有误差);基于农历新年为基准,对农历新年前后两个不同的农历进行计算。 写这个脚本之前是想在Linux

  • 本文向大家介绍php实现阳历阴历互转的方法,包括了php实现阳历阴历互转的方法的使用技巧和注意事项,需要的朋友参考一下 最近对阳历转阴历从而得到相应节日的算法这方面比较感兴趣,于是就在网上搜了一圈。不错,还算是找到一个比较不错的php类,实现了将阳历转换为阴历(农历),阴历转换为阳历的算法,同时还能获取干支纪年,生肖,以及相应的阴历的中文叫法等等,功能还是挺齐全的,在这里分享给大家。 具体类代码如

  • 本文向大家介绍C#实现的阴历阳历互相转化类实例,包括了C#实现的阴历阳历互相转化类实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#实现的阴历阳历互相转化类。分享给大家供大家参考,具体如下: 最近郁闷地发现网上现有的相当一部分万年历上干支纪年的算法都是错误的。因为干支纪年是针对阴历而言的,而生肖属相又跟地支对应,所以元旦和春节之间那段时间在干支纪年法中应该归上一年,以阳历2007年2

  • 本文向大家介绍JavaScript实现公历转农历功能示例,包括了JavaScript实现公历转农历功能示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript实现公历转农历功能。分享给大家供大家参考,具体如下: 完整代码(该源码使用在线工具http://tools.jb51.net/code/js进行了格式化处理,以便于读者阅读): 运行效果图如下: PS:这里再为大家推荐

  • 本文向大家介绍Javascript农历与公历相互转换的简单实例,包括了Javascript农历与公历相互转换的简单实例的使用技巧和注意事项,需要的朋友参考一下 如下所示: 以上就是小编为大家带来的Javascript农历与公历相互转换的简单实例全部内容了,希望大家多多支持呐喊教程~

  • 本文向大家介绍C#实现功能强大的中国农历日历操作类,包括了C#实现功能强大的中国农历日历操作类的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#实现功能强大的中国农历日历操作类。分享给大家供大家参考。具体如下: 这个C#类定义了中国农历日历,除了可以输入正常的日历外还可以获得指定年份的生肖、返回年份的干支以及星座、二十四节气、二十八星宿、常用节日等。 部分代码片段如下 完整实例代码点击此