当前位置:首页>软件介绍>php阴历程序 查询:
     
php阴历程序

        复制代码 代码如下:

        ?php

        /**

        * 公农历转换(1912 - 2012)

        *

        * Usage:

        * // 公历1983-10-5转农历

        * $lunar = new Lunar();

        * $date = $lunar- getLar('1983-10-5',0);

        * echo date("Y-m-d", $date); * // 农历1983-8-29转公历

        * $date = $lunar- getLar('1983-8-29',1);

        * echo date("Y-m-d", $date); *

        * @param string 日期

        * @param int 日期历法

        * - 0 公历

        农历 * 1

        *

        * @return timestamp

        这是一个国历与农历互相转的Unit.

        其中年份皆用民国年份, 请自行转换 (西元年-1911 = 民国年).

        *******************************************************************

        ********

        *国农历对映表之说明 : *

        *******************************************************************

        ********

        * 前二数字 = 闰月月份, 如果为 13 则没有闰月 *

        * 第叁至第六数字 = 12 个月之大小月之2进位码- 10进位 *

        * 例如: *

        * 101010101010 = 2730 *

        * 1 : 代表大月(30天) 0 : 代表小月(29天) == 1月大2月小3月大.. *

        * 第七位数字为闰月天数 *

        * 0 : 没有闰月之天数 *

        * 1 : 闰月为小月(29天) *

        * 2 : 闰月为大月(30天) *

        * 最後2位数字代表阳历之1月1日与阴历之1月1日相差天数 *

        *******************************************************************

        ********

        这对映表只有民国一年至民国一百年, 如不敷您的使用请按照上述之方式自

        行增加.

        这个程式没有判断您所输入之年,月,日是否正确, 请自行判断.

        如果转换出来之农历的月份是闰月则传给您的值是***负数***

        如果农历要转换国历如果是闰月请输入***负数***

        此版本为FreeWare Version : 0.1

        您可以自行修改, 但最好可以将修改过之程式Mail一份给我.

        如果您要用於商业用途, 请mail给我告知您的用途及原因.

        */

        class Lunar {

        var $LMDay = array();

        var $InterMonth = 0;

        var $InterMonthDays = 0;

        var $SLRangeDay = 0;

        var $SMDay = array(1 = 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

        var $LongLife = array( 1 =

        '132637048', '133365036', '053365225', '132900044', '131386034', '022778122', //6

        '132395041', '071175231', '131175050', '132635038', '052891127', '131701046', //12

        '131748035', '042741223', '130694043', '132391032', '021327122', '131175040', //18

        '061623129', '133402047', '133402036', '051769125', '131453044', '130694034', //24

        '032158223', '132350041', '073213230', '133221049', '133402038', '063466226', //30

        '132901045', '131130035', '042651224', '130605043', '132349032', '023371121', //36

        '132709040', '072901128', '131738047', '132901036', '051333226', '131210044', //42

        '132651033', '031111223', '131323042', '082714130', '133733048', '131706038', //48

        '062794127', '132741045', '131206035', '042734124', '132647043', '131318032', //54

        '033878120', '133477039', '071461129', '131386047', '132413036', '051245126', //60

        '131197045', '132637033', '043405122', '133365041', '083413130', '132900048', //66

        '132922037', '062394227', '132395046', '131179035', '042711124',

        '132635043', //72

        '102855132', '131701050', '131748039', '062804128', '132742047',

        '132359036', //78

        '051199126', '131175045', '131611034', '031866122', '133749040',

        '081717130', //84

        '131452049', '132742037', '052413127', '132350046', '133222035',

        '043477123', //90

        '133402042', '133493031', '021877121', '131386039', '072747128',

        '130605048', //96

        '132349037', '053243125', '132709044', '132890033');

        function getLar($date, $isLunar = 1){

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

        if($isLunar == 1)

        Lunar2Solar($year, $month, $day); return $this-

        else

        return $this- Solar2Lunar($year, $month, $day);

        }

        function IsLeapYear($AYear){

        return ($AYear % 4 == 0) and (($AYear % 100 0) or ($AYear % 400 ==

        0));

        }

        function CovertLunarMonth($magicno){

        $m = $magicno;

        for ($i = 12; $i $i--){

        $size = $m % 2;

        if ($size == 0)

        $this- LMDay[$i] = 29;

        else

        $this- LMDay[$i] = 30;

        $m = floor($m / 2);

        }

        }

        function ProcessMagicStr($yy){

        $yy = $yy - 1911;

        $magicstr = $this- LongLife[$yy];

        $this- InterMonth = substr($magicstr, 0, 2);

        $LunarMonth = substr($magicstr, 2, 4);

        $this- CovertLunarMonth($LunarMonth);

        $dsize = substr($magicstr, 6, 1);

        switch ($dsize) {

        case 0 :

        $this- InterMonthDays = 0;

        break;

        case 1 :

        $this- InterMonthDays = 29;

        break;

        case 2 :

        $this- InterMonthDays = 30;

        break;

        }

        SLRangeDay = substr($magicstr, 7, 2); $this-

        }

        function DaysPerLunarMonth($LYear, $LMonth){

        $this- ProcessMagicStr($LYear);

        if ($LMonth 0)

        return $this- InterMonthDays;

        else

        return $this- LMDay[$LMonth];

        }

        function Solar2Lunar($SYear, $SMonth, $SDay){

        if( !(1912 = $SYear && $SYear = 2012) ){

        return false;

        }

        $day = 0;

        if ($this- isLeapYear($SYear))

        $this- SMDay[2] = 29;

        $this- ProcessMagicStr($SYear);

        if ($SMonth == 1)

        $day = $SDay;

        else {

        for($i = 1; $i = $SMonth-1; $i++)

        $day = $day + $this- SMDay[$i];

        $day = $day + $SDay;

        }

        if ($day = $this- SLRangeDay) {

        $day = $day - $this- SLRangeDay;

        $this- processmagicstr($SYear-1);

        for ($i = 12; $i $i--){

        $day = $day + $this- LMDay[$i];

        if ($day 0)

        break;

        }

        $LYear = $SYear - 1;

        $LMonth = $i;

        $LDay = $day;

        } else {

        $day = $day - $this- SLRangeDay;

        for($i = 1; $i = $this- InterMonth-1; $i++){

        $day = $day - $this- LMDay[$i];

        if ($day = 0)

        break;

        }

        if ($day = 0) {

        $LYear = $SYear;

        $LMonth = $i;

        $LDay = $day + $this- LMDay[$i];

        } else {

        $day = $day - $this- LMDay[$this- InterMonth];

        if ($day = 0) {

        $LYear = $SYear;

        $LMonth = $this- InterMonth;

        $LDay = $day + $this- LMDay[$this- InterMonth];

        } else {

        $this- LMDay[$this- InterMonth] = $this- InterMonthDays;

        for ($i = $this- InterMonth; $i = 12; $i++){

        $day = $day - $this- LMDay[$i];

        if ($day = 0)

        break;

        }

        if ($i == $this- InterMonth)

        $LMonth = 0 - $this- InterMonth;

        else

        $LMonth = $i;

        $LYear = $SYear;

        $LDay = $day + $this- LMDay[$i];

        }

        }

        }

        return mktime(0, 0, 0, $LMonth, $LDay, $LYear);

        }

        function Lunar2Solar($LYear, $LMonth, $LDay){

        if( !(1912 = $LYear && $LYear = 2012) ){

        return false;

        }

        $day = 0;

        $SYear = $LYear;

        if ($this- isLeapYear($SYear))

        $this- SMDay[2] = 29;

        $this- processmagicstr($SYear);

        if ($LMonth 0)

        $day = $this- LMDay[$this- InterMonth];

        if ($LMonth 1)

        for ($i = 1; $i = $LMonth-1; $i++)

        $day = $day + $this- LMDay[$i];

        $day = $day + $LDay + $this- SLRangeDay;

        InterMonth 13) and ($this- InterMonth $LMonth)) if (($this-

        $day = $day + $this- InterMonthDays;

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

        $day = $day - $this- SMDay[$i];

        if ($day = 0)

        break;

        }

        if ($day 0) {

        $SYear = $SYear + 1;

        if ($this- isLeapYear($SYear))

        $this- SMDay[2] = 29;

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

        $day = $day - $this- SMDay[$i];

        if ($day = 0)

        break;

        }

        }

        $day = $day + $this- SMDay[$i];

        $SMonth = $i;

        $SDay = $day;

        return mktime(0, 0, 0, $SMonth, $SDay, $SYear);

        }

        }

        ?

        使用方法:

        复制代码 代码如下:

        $lunar = new Lunar();

        $date = $lunar- getLar('1983-10-5',0);

        echo date("Y-m-d", $date);

        // 农历1983-8-29转公历

        $date = $lunar- getLar('1983-8-29',1);

        echo date("Y-m-d", $date);

        复制代码 代码如下:

        ?php

        class Lunar {

        var $MIN_YEAR = 1891;

        var $MAX_YEAR = 2100;

        var $lunarInfo = array(

        array(0,2,9,21936),array(6,1,30,9656),array(0,2,17,9584),array(0,2,6,21168),array(5,1,26,43344),array(0,2,13,59728),

        array(0,2,2,27296),array(3,1,22,44368),array(0,2,10,43856),array(8,1,30,19304),array(0,2,19,19168),array(0,2,8,42352),

        array(5,1,29,21096),array(0,2,16,53856),array(0,2,4,55632),array(4,1,25,27304),array(0,2,13,22176),array(0,2,2,39632),

        array(2,1,22,19176),array(0,2,10,19168),array(6,1,30,42200),array(0,2,18,42192),array(0,2,6,53840),array(5,1,26,54568),

        array(0,2,14,46400),array(0,2,3,54944),array(2,1,23,38608),array(0,2,11,38320),array(7,2,1,18872),array(0,2,20,18800),

        array(0,2,8,42160),array(5,1,28,45656),array(0,2,16,27216),array(0,2,5,27968),array(4,1,24,44456),array(0,2,13,11104),

        array(0,2,2,38256),array(2,1,23,18808),array(0,2,10,18800),array(6,1,30,25776),array(0,2,17,54432),array(0,2,6,59984),

        array(5,1,26,27976),array(0,2,14,23248),array(0,2,4,11104),array(3,1,24,37744),array(0,2,11,37600),array(7,1,31,51560),

        array(0,2,19,51536),array(0,2,8,54432),array(6,1,27,55888),array(0,2,15,46416),array(0,2,5,22176),array(4,1,25,43736),

        array(0,2,13,9680),array(0,2,2,37584),array(2,1,22,51544),array(0,2,10,43344),array(7,1,29,46248),array(0,2,17,27808),

        array(0,2,6,46416),array(5,1,27,21928),array(0,2,14,19872),array(0,2,3,42416),array(3,1,24,21176),array(0,2,12,21168),

        array(8,1,31,43344),array(0,2,18,59728),array(0,2,8,27296),array(6,1,28,44368),array(0,2,15,43856),array(0,2,5,19296),

        array(4,1,25,42352),array(0,2,13,42352),array(0,2,2,21088),array(3,1,21,59696),array(0,2,9,55632),array(7,1,30,23208),

        array(0,2,17,22176),array(0,2,6,38608),array(5,1,27,19176),array(0,2,15,19152),array(0,2,3,42192),array(4,1,23,53864),

        array(0,2,11,53840),array(8,1,31,54568),array(0,2,18,46400),array(0,2,7,46752),array(6,1,28,38608),array(0,2,16,38320),

        array(0,2,5,18864),array(4,1,25,42168),array(0,2,13,42160),array(10,2,2,45656),array(0,2,20,27216),array(0,2,9,27968),

        array(6,1,29,44448),array(0,2,17,43872),array(0,2,6,38256),array(5,1,27,18808),array(0,2,15,18800),array(0,2,4,25776),

        array(3,1,23,27216),array(0,2,10,59984),array(8,1,31,27432),array(0,2,19,23232),array(0,2,7,43872),array(5,1,28,37736),

        array(0,2,16,37600),array(0,2,5,51552),array(4,1,24,54440),array(0,2,12,54432),array(0,2,1,55888),array(2,1,22,23208),

        array(0,2,9,22176),array(7,1,29,43736),array(0,2,18,9680),array(0,2,7,37584),array(5,1,26,51544),array(0,2,14,43344),

        array(0,2,3,46240),array(4,1,23,46416),array(0,2,10,44368),array(9,1,31,21928),array(0,2,19,19360),array(0,2,8,42416),

        array(6,1,28,21176),array(0,2,16,21168),array(0,2,5,43312),array(4,1,25,29864),array(0,2,12,27296),array(0,2,1,44368),

        array(2,1,22,19880),array(0,2,10,19296),array(6,1,29,42352),array(0,2,17,42208),array(0,2,6,53856),array(5,1,26,59696),

        array(0,2,13,54576),array(0,2,3,23200),array(3,1,23,27472),array(0,2,11,38608),array(11,1,31,19176),array(0,2,19,19152),

        array(0,2,8,42192),array(6,1,28,53848),array(0,2,15,53840),array(0,2,4,54560),array(5,1,24,55968),array(0,2,12,46496),

        array(0,2,1,22224),array(2,1,22,19160),array(0,2,10,18864),array(7,1,30,42168),array(0,2,17,42160),array(0,2,6,43600),

        array(5,1,26,46376),array(0,2,14,27936),array(0,2,2,44448),array(3,1,23,21936),array(0,2,11,37744),array(8,2,1,18808),

        array(0,2,19,18800),array(0,2,8,25776),array(6,1,28,27216),array(0,2,15,59984),array(0,2,4,27424),array(4,1,24,43872),

        array(0,2,12,43744),array(0,2,2,37600),array(3,1,21,51568),array(0,2,9,51552),array(7,1,29,54440),array(0,2,17,54432),

        array(0,2,5,55888),array(5,1,26,23208),array(0,2,14,22176),array(0,2,3,42704),array(4,1,23,21224),array(0,2,11,21200),

        array(8,1,31,43352),array(0,2,19,43344),array(0,2,7,46240),array(6,1,27,46416),array(0,2,15,44368),array(0,2,5,21920),

        array(4,1,24,42448),array(0,2,12,42416),array(0,2,2,21168),array(3,1,22,43320),array(0,2,9,26928),array(7,1,29,29336),

        array(0,2,17,27296),array(0,2,6,44368),array(5,1,26,19880),array(0,2,14,19296),array(0,2,3,42352),array(4,1,24,21104),

        array(0,2,10,53856),array(8,1,30,59696),array(0,2,18,54560),array(0,2,7,55968),array(6,1,27,27472),array(0,2,15,22224),

        array(0,2,5,19168),array(4,1,25,42216),array(0,2,12,42192),array(0,2,1,53584),array(2,1,21,55592),array(0,2,9,54560)

        );

        /**

        * 将阳历转换为阴历

        * @param year 公历-年

        * @param month 公历-月

        * @param date 公历-日

        */

        function convertSolarToLunar($year,$month,$date){

        //debugger;

        $yearData = $this- lunarInfo[$year-$this- MIN_YEAR];

        ($year==$this- MIN_YEAR&&$month =2&&$date =9){ return array(1891,'正月','初一','辛卯',1,1,'兔');

        }

        return $this- getLunarByBetween($year,$this- getDaysBetweenSolar($year,$month,$date,$yearData[1],$yearData[2]));

        }

        function convertSolarMonthToLunar($year,$month) { $yearData = $this- lunarInfo[$year-$this- MIN_YEAR]; if($year==$this- MIN_YEAR&&$month =2&&$date =9){

        初一','辛卯',1,1,'兔'); return array(1891,'正月','

        }

        $month_days_ary = array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30,

        31);

        $dd = $month_days_ary[$month];

        if($this- isLeapYear($year) && $month == 2) $dd++; $lunar_ary = array();

        for ($i = 1; $i $dd; $i++) {

        $array = $this- getLunarByBetween($year,$this- getDaysBetweenSolar($year, $month, $i, $yearData[1], $yearData[2]));

        $array[] = $year . '-' . $month . '-' . $i; $lunar_ary[$i] = $array;

        }

        return $lunar_ary;

        }

        /**

        * 将阴历转换为阳历

        * @param year 阴历-年

        * @param month 阴历-月,闰月处理:例如如果当年闰五月,那么第二个五月

        就传六月,相当于阴历有13个月,只是有的时候第13个月的天数为0

        * @param date 阴历-日

        */

        function convertLunarToSolar($year,$month,$date){ $yearData = $this- lunarInfo[$year-$this- MIN_YEAR]; $between = $this- getDaysBetweenLunar($year,$month,$date); $res = mktime(0,0,0,$yearData[1],$yearData[2],$year); $res = date('Y-m-d', $res+$between*24*60*60); $day = explode('-', $res);

        $year = $day[0];

        $month= $day[1];

        $day = $day[2];

        return array($year, $month, $day);

        }

        /**

        * 判断是否是闰年

        * @param year

        */

        function isLeapYear($year){

        return (($year%4==0 && $year%100 !=0) || ($year%400==0));

        }

        /**

        * 获取干支纪年

        * @param year

        */

        function getLunarYearName($year){ $sky = array('庚','辛','壬','癸','甲','乙','丙','丁','戊','己'); $earth = array('申','酉','戌','亥','子','丑','寅','卯','辰','巳','午','未');

        $year = $year.'';

        return $sky[$year{3}].$earth[$year%12]; }

        /**

        * 根据阴历年获取生肖

        * @param year 阴历年

        */

        function getYearZodiac($year){

        $zodiac = array('猴','鸡','狗','猪','鼠','牛','虎','兔','龙','蛇','马','羊');

        return $zodiac[$year%12];

        }

        /**

        * 获取阳历月份的天数

        * @param year 阳历-年

        * @param month 阳历-月

        */

        function getSolarMonthDays($year,$month){ $monthHash = array('1'= 31,'2'= $this- isLeapYear($year)?29:28,'3'=

        31,'4'= 30,'5'= 31,'6'= 30,'7'= 31,'8'= 31,'9'= 30,'10'= 31,'11'=

        30,'12'=

        return $monthHash["$month"];

        }

        /**

        * 获取阴历月份的天数

        * @param year 阴历-年

        * @param month 阴历-月,从一月开始

        */

        function getLunarMonthDays($year,$month){ $monthData = $this- getLunarMonths($year);

        $monthData[$month-1];

        }

        /**

        * 获取阴历每月的天数的数组

        * @param year

        */

        function getLunarMonths($year){

        $yearData = $this- lunarInfo[$year - $this- MIN_YEAR];

        $leapMonth = $yearData[0];

        $bit = decbin($yearData[3]);

        for ($i = 0; $i strlen($bit);$i ++) { $bitArray[$i] = substr($bit, $i, 1); }

        for($k=0,$klen=16-count($bitArray);$k $klen;$k++){ array_unshift($bitArray, '0');

        }

        $bitArray = array_slice($bitArray,0,($leapMonth==0?12:13));

        for($i=0; $i count($bitArray); $i++){ $bitArray[$i] = $bitArray[$i] + 29; }

        return $bitArray;

        }

        /**

        * 获取农历每年的天数

        * @param year 农历年份

        */

        function getLunarYearDays($year){

        $yearData = $this- lunarInfo[$year-$this- MIN_YEAR];

        $monthArray = $this- getLunarYearMonths($year); $len = count($monthArray);

        return ($monthArray[$len-1]==0?$monthArray[$len-2]:$monthArray[$len-

        1]);

        }

        function getLunarYearMonths($year){ //debugger;

        $monthData = $this- getLunarMonths($year); $res=array();

        $temp=0;

        $yearData = $this- lunarInfo[$year-$this- MIN_YEAR];

        $len = ($yearData[0]==0?12:13);

        for($i=0;$i $len;$i++){

        $temp=0;

        for($j=0;$j $j++){

        $temp+=$monthData[$j];

        }

        array_push($res, $temp); }

        return $res;

        }

        /**

        * 获取闰月

        * @param year 阴历年份

        */

        function getLeapMonth($year){

        lunarInfo[$year-$this- MIN_YEAR]; $yearData = $this-

        return $yearData[0];

        }

        /**

        * 计算阴历日期与正月初一相隔的天数

        * @param year

        * @param month

        * @param date

        */

        function getDaysBetweenLunar($year,$month,$date){

        $yearMonth = $this- getLunarMonths($year);

        $res=0;

        for($i=1;$i $month;$i++){ $res +=$yearMonth[$i-1]; }

        $res+=$date-1;

        return $res;

        }

        /**

        * 计算2个阳历日期之间的天数

        * @param year 阳历年

        * @param cmonth

        * @param cdate

        * @param dmonth 阴历正月对应的阳历月份

        * @param ddate 阴历初一对应的阳历天数

        */

        function getDaysBetweenSolar($year,$cmonth,$cdate,$dmonth,$ddate){

        $a = mktime(0,0,0,$cmonth,$cdate,$year);

        $b = mktime(0,0,0,$dmonth,$ddate,$year);

        return ceil(($a-$b)/24/3600); }

        /**

        * 根据距离正月初一的天数计算阴历日期

        * @param year 阳历年

        * @param between 天数

        */

        function getLunarByBetween($year,$between){ //debugger;

        $lunarArray = array();

        $yearMonth=array();

        $t=0;

        $e=0;

        $leapMonth=0;

        $m='';

        if($between==0){

        array_push($lunarArray, $year,'正月','初一');

        $t = 1;

        $e = 1;

        }else{

        $year = $between 0? $year : ($year-1); $yearMonth = $this- getLunarYearMonths($year); $leapMonth = $this- getLeapMonth($year); $between = $between 0?$between : ($this- getLunarYearDays($year)+$between); for($i=0;$i $i++){

        if($between==$yearMonth[$i]){

        $t=$i+2;

        $e=1;

        break;

        }else if($between $yearMonth[$i]){ $t=$i+1;

        $e=$between-(empty($yearMonth[$i-1])?0:$yearMonth[$i-1])+1;

        break;

        }

        }

        $m = ($leapMonth!=0&&$t==$leapMonth+1)?('闰'.$this- getCapitalNum($t- 1,true)):$this- getCapitalNum(($leapMonth!=0&&$leapMonth+1 $t?($t-

        1):$t),true);

        array_push($lunarArray,$year,$m,$this- getCapitalNum($e,false));

        }

        array_push($lunarArray,$this- getLunarYearName($year));// 天干地支 array_push($lunarArray,$t,$e);

        array_push($lunarArray,$this- getYearZodiac($year));// 12生肖

        array_push($lunarArray,$leapMonth);// 闰几月

        return $lunarArray;

        }

        /**

        * 获取数字的阴历叫法

        * @param num 数字

        * @param isMonth 是否是月份的数字

        */

        function getCapitalNum($num,$isMonth){ $isMonth = $isMonth || false; $dateHash=array('0'= '','1'= '一','2'= '二','3'= '三','4'= '四','5'= '五','6'= '六','7'= '七','8'= '八','9'= '九','10'= '十 '); $monthHash=array('0'= '','1'= '正月','2'= '二月','3'= '三月','4'= '四月','5'= '五月','6'= '六月','7'= '七月','8'= '八月','9'= '九月','10'= '十月','11'= '冬月','12'= '腊月');

        $res='';

        if($isMonth){

        $res = $monthHash[$num];

        }else{

        if($num =10){

        $res = '初'.$dateHash[$num];

        }else if($num 10&&$num 20){ $res = '十'.$dateHash[$num-10]; }else if($num==20){

        $res = "二十";

        }else if($num 20&&$num 30){ $res = "廿".$dateHash[$num-20]; }else if($num==30){

        $res = "三十";

        }

        }

        return $res;

        }

        }

        $lunar = new Lunar();

        $month = $lunar- convertLunarToSolar(2012, 1,1);

        print_r($month);

        exit; 

        


深度探讨PHP之性能怎样才能成为PHP高手
PHP用户注册与登录php调用linux计划任务
php里session的用法php在百度的发展历程
php中关于引用(&)详解 PHP正则表达式的几则使用技巧
细说PHP模板引擎windows下PHP运行环境安装详解
js与php调用PHP与ASP.NET的比较
PHP基本语法补充案例PHP简明教程
php开源框架分析PHP文件删除程序
信息发布:广州名易软件有限公司 http://www.myidp.net
  • 名易软件销售服务
  • 名易软件销售服务
  • 名易软件技术服务

  • php阴历程序