`

公历日期与农历日期的互转换

阅读更多

// 今天根据客户的需求对时间进行了转换,就是客户要求增加农历日期的显示,在网上抄袭了一段,稍微修改了一下运行成功了,不难的,改动的很少的.

<?php 
/*
 *
 * 陈海波     新二级页面  农历转换成公历
 *
 * */

//  lunar.php     新建这个php文件,所有的代码无需改,需要改的是下面teacher.php 的几行
class Lunar

 private  $_SMDay = array(1 => 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);//定义公历月分天数 
 private  $_LStart = 1950 ;//农历从1950年开始 
 private  $_LMDay = array( 

    //差:该年的农历正月初一到该年公历1月1日的天数;1~12:农历月份天数;闰:如有闰月,记录该月平月天数 
    //    差  1  2  3  4  5  6  7  8  9 10 11 12 闰 
    array(47,29,30,30,29,30,30,29,29,30,29,30,29), 
    array(36,30,29,30,30,29,30,29,30,29,30,29,30), 
    array(6,29,30,29,30,59,29,30,30,29,30,29,30,29),    //五月29 闰五月30 
    array(44,29,30,29,29,30,30,29,30,30,29,30,29), 
    array(33,30,29,30,29,29,30,29,30,30,29,30,30), 
    array(23,29,30,59,29,29,30,29,30,29,30,30,30,29),    //三月29 闰三月30 
    array(42,29,30,29,30,29,29,30,29,30,29,30,30), 
    array(30,30,29,30,29,30,29,29,59,30,29,30,29,30),    //八月30 闰八月29 
    array(48,30,30,30,29,30,29,29,30,29,30,29,30), 
    array(38,29,30,30,29,30,29,30,29,30,29,30,29), 
    array(27,30,29,30,29,30,59,30,29,30,29,30,29,30),    //六月30 闰六月29 
    array(45,30,29,30,29,30,29,30,30,29,30,29,30), 
    array(35,29,30,29,29,30,29,30,30,29,30,30,29), 
    array(24,30,29,30,58,30,29,30,29,30,30,30,29,29),    //四月29 闰四月29 
    array(43,30,29,30,29,29,30,29,30,29,30,30,30), 
    array(32,29,30,29,30,29,29,30,29,29,30,30,29), 
    array(20,30,30,59,30,29,29,30,29,29,30,30,29,30),    //三月30 闰三月29 
    array(39,30,30,29,30,30,29,29,30,29,30,29,30), 
    array(29,29,30,29,30,30,29,59,30,29,30,29,30,30),    //七月30 闰七月29 
    array(47,29,30,29,30,29,30,30,29,30,29,30,29), 
    array(36,30,29,29,30,29,30,30,29,30,30,29,30), 
    array(26,29,30,29,29,59,30,29,30,30,30,29,30,30),    //五月30 闰五月29 
    array(45,29,30,29,29,30,29,30,29,30,30,29,30), 
    array(33,30,29,30,29,29,30,29,29,30,30,29,30), 
    array(22,30,30,29,59,29,30,29,29,30,30,29,30,30),    //四月30 闰四月29 
 array(41,30,30,29,30,29,29,30,29,29,30,29,30), 
 array(30,30,30,29,30,29,30,29,59,29,30,29,30,30),    //八月30 闰八月29 
 array(48,30,29,30,30,29,30,29,30,29,30,29,29), 
 array(37,30,29,30,30,29,30,30,29,30,29,30,29), 
 array(27,30,29,29,30,29,60,29,30,30,29,30,29,30),    //六月30 闰六月30 
 array(46,30,29,29,30,29,30,29,30,30,29,30,30), 
 array(35,29,30,29,29,30,29,29,30,30,29,30,30), 
 array(24,30,29,30,58,30,29,29,30,29,30,30,30,29),    //四月29 闰四月29 
 array(43,30,29,30,29,29,30,29,29,30,29,30,30), 
 array(32,30,29,30,30,29,29,30,29,29,59,30,30,30),    //十月30 闰十月29 
 array(50,29,30,30,29,30,29,30,29,29,30,29,30), 
 array(39,29,30,30,29,30,30,29,30,29,30,29,29), 
 array(28,30,29,30,29,30,59,30,30,29,30,29,29,30),    //六月30 闰六月29 
 array(47,30,29,30,29,30,29,30,30,29,30,30,29), 
 array(36,30,29,29,30,29,30,29,30,29,30,30,30), 
 array(26,29,30,29,29,59,29,30,29,30,30,30,30,30),    //五月30 闰五月29 
 array(45,29,30,29,29,30,29,29,30,29,30,30,30), 
 array(34,29,30,30,29,29,30,29,29,30,29,30,30), 
 array(22,29,30,59,30,29,30,29,29,30,29,30,29,30),    //三月30 闰三月29 
 array(40,30,30,30,29,30,29,30,29,29,30,29,30), 
 array(30,29,30,30,29,30,29,30,59,29,30,29,30,30),    //八月30 闰八月29 
 array(49,29,30,29,30,30,29,30,29,30,30,29,29), 
 array(37,30,29,30,29,30,29,30,30,29,30,30,29), 
 array(27,30,29,29,30,58,30,30,29,30,30,29,30,29),    //五月29 闰五月29 
 array(46,30,29,29,30,29,29,30,29,30,30,30,29), 
 array(35,30,30,29,29,30,29,29,30,29,30,30,29), 
 array(23,30,30,29,59,30,29,29,30,29,30,29,30,30),    //四月30 闰四月29 
 array(42,30,30,29,30,29,30,29,29,30,29,30,29), 
 array(31,30,30,29,30,30,29,30,29,29,30,29,30), 
 array(21,29,59,30,30,29,30,29,30,29,30,29,30,30),    //二月30 闰二月29 
 array(39,29,30,29,30,29,30,30,29,30,29,30,29), 
 array(28,30,29,30,29,30,29,59,30,30,29,30,30,30),    //七月30 闰七月29 
 array(48,29,29,30,29,29,30,29,30,30,30,29,30), 
 array(37,30,29,29,30,29,29,30,29,30,30,29,30), 
 array(25,30,30,29,29,59,29,30,29,30,29,30,30,30),    //五月30 闰五月29 
 array(44,30,29,30,29,30,29,29,30,29,30,29,30), 
 array(33,30,29,30,30,29,30,29,29,30,29,30,29), 
 array(22,30,29,30,59,30,29,30,29,30,29,30,29,30),    //四月30 闰四月29 
 array(40,30,29,30,29,30,30,29,30,29,30,29,30), 
 array(30,29,30,29,30,29,30,29,30,59,30,29,30,30),    //九月30 闰九月29 
 array(49,29,30,29,29,30,29,30,30,30,29,30,29), 
 array(38,30,29,30,29,29,30,29,30,30,29,30,30), 
 array(27,29,30,29,30,29,59,29,30,29,30,30,30,29),    //六月29 闰六月30 
 array(46,29,30,29,30,29,29,30,29,30,29,30,30), 
 array(35,30,29,30,29,30,29,29,30,29,29,30,30), 
 array(24,29,30,30,59,30,29,29,30,29,30,29,30,30),    //四月30 闰四月29 
 array(42,29,30,30,29,30,29,30,29,30,29,30,29), 
 array(31,30,29,30,29,30,30,29,30,29,30,29,30), 
 array(21,29,59,29,30,30,29,30,30,29,30,29,30,30),    //二月30 闰二月29 
 array(40,29,30,29,29,30,29,30,30,29,30,30,29), 
 array(28,30,29,30,29,29,59,30,29,30,30,30,29,30),    //六月30 闰六月29 
 array(47,30,29,30,29,29,30,29,29,30,30,30,29), 
 array(36,30,30,29,30,29,29,30,29,29,30,30,29), 
 array(25,30,30,30,29,59,29,30,29,29,30,30,29,30),    //五月30 闰五月29 
 array(43,30,30,29,30,29,30,29,30,29,29,30,30), 
 array(33,29,30,29,30,30,29,30,29,30,29,30,29), 
 array(22,29,30,59,30,29,30,30,29,30,29,30,29,30),    //三月30 闰三月29 
 array(41,30,29,29,30,29,30,30,29,30,30,29,30), 
 array(30,29,30,29,29,30,29,30,29,30,30,59,30,30),    //十一月30 闰十一月29 
 array(49,29,30,29,29,30,29,30,29,30,30,29,30), 
 array(38,30,29,30,29,29,30,29,29,30,30,29,30), 
 array(27,30,30,29,30,29,59,29,29,30,29,30,30,29),    //六月29 闰六月30 
 array(45,30,30,29,30,29,29,30,29,29,30,29,30), 
 array(34,30,30,29,30,29,30,29,30,29,29,30,29), 
 array(23,30,30,29,30,59,30,29,30,29,30,29,29,30),    //五月30 闰五月29 
 array(42,30,29,30,30,29,30,29,30,30,29,30,29), 
 array(31,29,30,29,30,29,30,30,29,30,30,29,30), 
 array(21,29,59,29,30,29,30,29,30,30,29,30,30,30),    //二月30 闰二月29 
 array(40,29,30,29,29,30,29,29,30,30,29,30,30), 
 array(29,30,29,30,29,29,30,58,30,29,30,30,30,29),    //七月29 闰七月29 
 array(47,30,29,30,29,29,30,29,29,30,29,30,30), 
 array(36,30,29,30,29,30,29,30,29,29,30,29,30), 
 array(25,30,29,30,30,59,29,30,29,29,30,29,30,29),    //五月29 闰五月30 
 array(44,29,30,30,29,30,30,29,30,29,29,30,29), 
 array(32,30,29,30,29,30,30,29,30,30,29,30,29), 
 array(22,29,30,59,29,30,29,30,30,29,30,30,29,29),    //三月29 闰三月30        
 ); 

    //是否闰年 
   private function IsLeapYear($AYear)
   { 
     return ($AYear % 4 == 0) && (($AYear % 100 != 0) || ($AYear % 400 == 0)); 
   } 

    //公历该月的天数(year:年份; month:月份) 
    private function GetSMon($year,$month) 
    { 

        if($this->IsLeapYear($year) && $month == 2) 
             return 29; 
        else
            return $this->_SMDay[$month]; 
    } 

     //农历名称转换 
    private function LYearName($year) 
    { 
        $Name = array("零","一","二","三","四","五","六","七","八","九"); 
        for($i=0;$i<4;$i++) 
           for($k=0;$k<10;$k++) 
                if($year[$i]==$k) 
                    $tmp.=$Name[$k]; 
         return $tmp; 
    } 

    private function LMonName($month) 
    { 
         if($month >=1 && $month <=12 ) 
         { 
           $Name = array( 1=>"正","二","三","四","五","六","七","八","九","十","十一","十二"); 
            return $Name[$month]; 
        } 
        return $month; 
    } 

    private function LDayName($day) 
    { 
         if($day >=1 && $day <=30 ) 
         { 
             $Name = array( 1 => 
            "初一","初二","初三","初四","初五","初六","初七","初八","初九","初十", 
             "十一","十二","十三","十四","十五","十六","十七","十八","十九","二十", 
             "廿一","廿二","廿三","廿四","廿五","廿六","廿七","廿八","廿九","三十"
             ); 
             return $Name[$day]; 
         }  
        return $day; 
    } 
     //公历转农历(Sdate:公历日期) 
    public function S2L($date) 
    { 
        list($year, $month, $day) = explode("-", $date); 
        if($year <= 1951 || $month <= 0 || $day <= 0 || $year >= 2051 ) return false; 
         //获取查询日期到当年1月1日的天数 
        $date1 = strtotime($year."-01-01");//当年1月1日 
        $date2 = strtotime($year."-".$month."-".$day); 
        $days=round(($date2-$date1)/3600/24); 
        $days += 1; 

         //获取相应年度农历数据,化成数组Larray 

        $Larray = $this->_LMDay[$year - $this->_LStart]; 

         if($days <= $Larray[0]) 

         { 

             $Lyear = $year - 1; 

            $days = $Larray[0] - $days; 

            $Larray = $this->_LMDay[$Lyear - $this->_LStart]; 

             if($days < $Larray[12]) 

            { 

                 $Lmonth = 12; 

                 $Lday = $Larray[12] - $days; 

             } 

             else

            { 

                $Lmonth = 11; 

                $days = $days - $Larray[12]; 

                 $Lday = $Larray[11] - $days; 

            }            

         } 

         else

         { 

             $Lyear = $year; 

             $days = $days - $Larray[0]; 

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

             { 

                 if($days > $Larray[$i]) $days = $days - $Larray[$i]; 

                else 

                 { 

                    if ($days > 30){ 

                         $days = $days - $Larray[13]; 

                         $Ltype = 1; 

                    } 

                    $Lmonth = $i; 

                    $Lday = $days; 

                     break; 

                 } 

            } 

         } 

         return mktime(0, 0, 0, $Lmonth, $Lday, $Lyear); 

         //$Ldate = $Lyear."-".$Lmonth."-".$Lday; 

         //$Ldate = $this->LYearName($Lyear)."年".$this->LMonName($Lmonth)."月".$this->LDayName($Lday); 

         //if($Ltype) $Ldate.="(闰)"; 

         //return $Ldate; 

     } 

     //农历转公历(date:农历日期; type:是否闰月) 

     public function L2S($date,$type = 0) 
  { 

         list($year, $month, $day) = split("-",$date); 

         if($year <= 1951 || $month <= 0 || $day <= 0 || $year >= 2051 ) return false; 

         $Larray = $this->_LMDay[$year - $this->_LStart]; 

         if($type == 1 && count($Larray)<=12 ) return false;//要求查询闰,但查无闰月 

         //如果查询的农历是闰月并该年度农历数组存在闰月数据就获取 

         if($Larray[$month]>30 && $type == 1 && count($Larray) >=13)   $day = $Larray[13] + $day; 

         //获取该年农历日期到公历1月1日的天数 

         $days = $day; 

         for($i=0;$i<=$month-1;$i++) 

             $days += $Larray[$i]; 

        //当查询农历日期距离公历1月1日超过一年时 

        if($days > 366 || ($this->GetSMon($month,2)!=29 && $days>365 )) 

         { 

             $Syear = $year +1; 

            if($this->GetSMon($month,2)!=29)  

                $days-=366; 

             else

                $days-=365; 

             if($days > $this->_SMDay[1])  

             { 

                $Smonth = 2; 

                 $Sday = $days - $this->_SMDay[1]; 

            } 

             else

            { 

                 $Smonth = 1; 

                 $Sday = $days; 

             }        

         } 

         else

         { 

             $Syear =$year; 

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

             { 

                if($days > $this->GetSMon($Syear,$i)) 

                    $days-=$this->GetSMon($Syear,$i); 

                 else

                 { 

                    $Smonth = $i; 

                    $Sday = $days; 

                    break; 

                 } 

             } 

         } 

         return mktime(0, 0, 0, $Smonth, $Sday, $Syear); 

         //$Sdate = $Syear."-".$Smonth."-".$Sday; 

         //return $Sdate; 

     } 

 } 

?>

 // teacher.php

   //公历转农历 

  require_once(CORE_."Lunar.php");   // 加载lunar.php文件
  $today = date("Y-m-d"); 
  $lunar = new Lunar();              // 实例化类
  $nonglitime = array();
  $nl = date("Y-n-d",$lunar->S2L($today));   

  echo $nl;exit;   // 转为农历是:2012-05-25

 

 

 

分享到:
评论

相关推荐

    PHP 实现公历日期与农历日期的互转换

    在PHP中实现公历日期与农历日期的互转换是一个常见的需求,特别是在处理与中国传统节日相关的日期计算时。这里提供了一段示例代码,用于完成这一功能。这段代码定义了一个名为`Lunar`的类,包含了农历转换为公历以及...

    java阳历转农历

    Java阳历转农历类可以将公历日期转换为农历日期,提供了一个便捷的方式来获取农历日期。 在 Java 中,实现阳历转农历需要使用到 Calendar 和 Date 类。Calendar 类提供了一个抽象的日历模型,可以用来计算日期的年...

    农历转换代码,可以获取指定公历对应的农历

    在这个例子中,可能包含了显示公历和农历日期的控件,以及可能有的转换按钮。 5. `lunardemo.dof` 和 `lunar.dof`:这些都是工程(Project)选项文件,包含了项目的配置信息,如编译设置、调试选项等。每个项目可能...

    公历转农历delphi源码

    - **日期结构体**:定义表示公历和农历日期的数据结构,可能包括年、月、日、星期等字段。 - **天文计算函数**:用于计算农历月首、闰年等天文信息的函数。 - **转换函数**:实现公历到农历和农历到公历转换的核心...

    js农历公历日期相互转换函数javascript日期转换

    调用简单,下拉传一日期加类型即可转换日期的类型,如: CalConvert(new Date(2010,3,19), false) //农历转换为公历 CalConvert(new Date(2010,3,19), true)//公历转换成农历

    农历与公历转换_PB日历公历农历_

    标题中的“农历与公历转换_PB日历公历农历_”指的是使用PowerBuilder(PB)开发的一个程序,该程序能够实现公历日期与农历日期之间的转换功能。在计算机编程中,这种转换通常涉及到时间日期处理,是软件开发中的一个...

    公历和农历互相转换

    公历和农历互相转换公农历互转API: 作用 返回值 方法 参数 公历日期转农历日期 String DateConvert.sCalendarSolarToLundar(int year,int month,int day) 农历日期转公历日期 String DateConvert....

    java 农历与公历互转(支持1981-2100)

    2. `public Solar toSolar()`:将农历日期转换为公历日期。 3. `public Lunar toLunar()`:如果从公历转换而来,此方法用于返回当前农历日期的公历表示。 4. `public int getDaysToNextBirthday()`:计算从当前日期...

    java(阳历转换为农历).pdf

    java阳历转换为农历是指将公历日期转换为农历日期的过程。Java是一种广泛使用的编程语言,通过使用Java语言,可以实现阳历日期到农历日期的转换。 知识点一:Java中的日期类 在Java中,日期类是java.util包下的一...

    Delphi 国历与农历转换单元

    3. **日期范围转换**:可能支持批量转换一个日期范围内的所有日期,例如将一整年的农历日期转换为公历。 4. **日期合法性检查**:确保输入的日期在有效的历法范围内,避免因非法日期导致的错误。 5. **节假日和...

    微信小程序农历阳历日期选择器选中日期同时获取对应农/阳历日期

    首先,我们要创建两个日期选择器,一个用于选择阳历日期,另一个用于选择农历日期。这两个选择器可以通过同一个事件响应函数进行关联,当用户在任一选择器中选择日期后,都会触发该函数。 在事件响应函数中,我们...

    用51单片机实现公历与农历转换C

    在本文中,我们将深入探讨如何使用51...总的来说,51单片机上的公历与农历转换是嵌入式系统中的一个典型应用,通过理解和实现这个项目,不仅可以提升对日期处理算法的理解,也能加深对51单片机及C语言编程的掌握。

    c#农历转公历以及公历转农历

    3. 公历到农历的转换:同样需要复杂的算法,通常涉及到查找特定公历日期在历史上的农历日期记录,因为公历日期与农历日期的对应关系不是线性的。 4. 边界条件处理:确保转换的正确性,尤其是在1902年到2100年这个...

    QT实现农历转换(C++)

    1. `LunarConverter`:这个类将包含农历和公历转换的核心算法,包括计算干支、节气和农历日期。 2. `DateDisplay`:一个Qt部件,用于显示日期、节气和干支信息,它可以连接到`LunarConverter`的信号,当公历日期改变...

    vb公历农历转换.rarvb公历农历转换.rar

    反之,也可以创建一个`LunarToGregorian`函数,将农历日期转换为公历。 5. **循环与条件判断**:在编写转换函数时,可能会用到循环(For...Next或While... Wend)来遍历月份和年份,以及条件语句(If...Then...Else...

    oracle日历转化成农历

    Oracle数据库系统提供了强大的日期处理功能,其中包括将公历(阳历)日期转换为农历日期。在Oracle中,虽然没有内置的直接转换函数来实现这一功能,但可以通过自定义函数或者利用现有的开源存储过程来实现这一转换。...

    MATLAB实现阳历、阴历与干支历的日期转换

    总的来说,`clsdate.m`是一个实用的MATLAB工具,它可以帮助我们更好地理解和处理不同历法下的日期转换,对于那些需要进行跨历法计算的工作非常有价值。通过熟练掌握这样的函数,我们可以更便捷地在中国传统节日、...

    公历转换农历的算法(JavaScript)

    公历转换农历的算法是指将公历日期转换为农历日期的过程。公历是国际通用的日期系统,而农历则是中国传统的日期系统。农历的日期系统与公历不同,它的日期是根据月亮的周期变化而定的。 在计算机程序设计中,实现...

    js公历日期转农历日期.txt

    - 最后,使用 `nStr1` 和 `nStr2` 数组将计算得到的农历日期转换为汉字表示。 #### 5. 实际应用 在实际应用中,这种日期转换功能可以集成到各种应用程序和服务中,如日历应用、天气预报、节日提醒等。不仅可以帮助...

Global site tag (gtag.js) - Google Analytics