: This article mainly introduces the lunar calendar-conversion PHP version. if you are interested in the PHP Tutorial, please refer to it.
LunarInfo [$ year-$ this-> MIN_YEAR]; if ($ year = $ this-> MIN_YEAR & $ month <= 2 & $ date <= 9) {return array (1891, 'February 11', '1st 1', 'sinmao ', lunar January, 'rabbit');} 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) {return Array (1891, 'October 11', '1st 1', 'sinmao ', lunar January, 'rabbit');} $ 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 ;} /*** convert the lunar calendar to the Gregorian calendar * @ param year-year * @ param month indicates the lunar calendar-month, and the leap month is processed. for example, if the current year expires on January 1, May, in this case, the second month is set to 13th, which is equivalent to 13 months in the lunar calendar, but sometimes the number of days in the second month is 0 * @ param date in the lunar calendar-day */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]; $ m $ day = $ day [2]; return array ($ year, $ month, $ day );} /*** determine whether it is a leap year * @ param year */function isLeapYear ($ year) {return ($ year % 4 = 0 & $ year % 100! = 0) | ($ year % 400 = 0);}/*** obtain the year of the credit calculation * @ param year */function getLunarYearName ($ year) {$ sky = array ('geng ', 'sin', 'Shen', 'cap', 'A', 'B', 'Bing', 'ding ', 'pente', 'jid'); $ earth = array ('shen', 'uni', 'Shanghai', 'sub', 'ug ', 'yin ', 'Mao', 'Chen ', 'Si', 'Wu ', 'Wei'); $ year = $ year. ''; return $ sky [$ year {3}]. $ earth [$ year % 12];}/*** obtain the zodiac sign based on the lunar year * @ param year lunar year */function getYearZodiac ($ year) {$ zodiac = array ('Monkey ', 'Chicken', 'dog', 'pig', 'Rat ', 'ox', 'Tiger ', 'rabbit ', 'Long', 'Snake ', 'ma', 'Yang' ); Return $ zodiac [$ year % 12];} /*** get the number of days of the calendar month * @ param year Gregorian calendar-year * @ param month Gregorian calendar-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' => 31 ); return $ monthHash ["$ month"];}/*** get the number of days of the calendar month * @ param year lunar calendar-year * @ param month lunar calendar-month, starting from January 1, January */function getLunarMonthDays ($ year, $ month) {$ monthData = $ this-> getLunarMonths ($ year); return $ monthData [$ month-1];} /*** obtain the array of the number of days of the calendar month * @ 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, ($ leapM for ($ I = 0; $ I
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 <= $ I; $ j ++) {$ temp + = $ monthData [$ j];} array_push ($ res, $ temp);} return $ res ;} /*** get a leap month * @ param year lunar year */function getLeapMonth ($ year) {$ yearData = $ this-> lunarInfo [$ year-$ this-> MIN_YEAR]; return $ yearData [0];}/*** calculate the number of days between the lunar calendar date and January 1, lunar January 1 * @ 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 ;} /*** calculate the number of days between two calendar dates * @ param year calendar year * @ param cmonth * @ param cdate * @ param dmonth the calendar month corresponding to January 1, lunar January * @ param ddate the number of calendar days corresponding to the first day */function getDaysBetweenSolar ($ year, $ cmonth, $ cdate, $ dmonth, $ ddate) {$ a = mktime (0, 0, $ cmonth, $ cdate, $ year); $ B = mktime (0, 0, 0, $ dmonth, $ ddate, $ year); re Turn ceil ($ a-$ B)/24/3600 );} /*** calculate the lunar calendar date by the number of days from January 1, lunar January 1 * @ param year/function getLunarByBetween ($ year, $ between) {// debugger; $ lunarArray = array (); $ yearM $ t = 0; $ e = 0; $ leapM $ m = ''; if ($ between = 0) {array_push ($ lunarArray, $ year, 'October 11', '1st 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 <13; $ 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 )? ('Authorization'. $ 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 Zodiac array_push ($ lunarArray, $ leapMonth); // returns $ lunarArray ;} /*** obtain the digit's lunar name * @ param num number * @ param isMonth is the number of the month */function getCapitalNum ($ num, $ isMonth) {$ isMonth = $ isMonth | false; $ dateHash = array ('0' => '', '1' => '1 ', '2' => '2', '3' => '3', '4' => '4', '5' => '5 ', '6' => '6', '7' => '7', '8' => '8', '9' => '9 ', '10' => '10'); $ m $ res = ''; if ($ isMonth) {$ res = $ monthHash [$ num];} else {if ($ num <= 10) {$ res = 'chu '. $ dateHash [$ num];} else if ($ num> 10 & $ num <20) {$ res = '10 '. $ dateHash [$ num-10];} else if ($ num = 20) {$ res = "20";} else if ($ num> 20 & $ num <30) {$ res = "Hangzhou ". $ dateHash [$ num-20];} else if ($ num = 30) {$ res = "thirty" ;}} return $ res ;}} $ lunar = new Lunar (); $ month = $ lunar-> convertLunarToSolar (2012,); print_r ($ month); exit;
The above introduces the lunar calendar-conversion Class PHP version, including some content, hope to be helpful to friends who are interested in PHP tutorials.