/** * Lunar Calendar The profound lunar calendar * Raw data and algorithmic ideas from S&s Lab http://www.focus-2000.com Unfortunately, the site seems to be closed. */ /* The number of days of the lunar month. Each element is one year. The data in each element is: [0] is the leap month in which months, 0 for no leap month; [1] to [13] is each year 12 or 13 months of the monthly number of days; [14] is the zodiac order of the Year, [15] is the earthly order of the Year */
-
- function Lunarcalendar ($month, $year)
- {
- Global $lnlunarcalendar;
- /**
- * Lunar Calendar The profound lunar calendar
- * Raw data and algorithmic ideas from S&s
- Lab http://www.focus-2000.com Unfortunately, the site seems to be closed.
- */
- /*
- The number of days of the lunar month.
- Each element is one year. The data in each element is:
- [0] is the leap month in which months, 0 for no leap month;
- [1] to [13] is each year 12 or 13 months of the monthly number of days;
- [14] is the zodiac order of the Year,
- [15] is the earthly order of the Year
- */
- $everymonth = 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),
- Ten = = Array (0, 29, 30, 29, 29, 30, 29, 30, 29, 30, 30, 30, 29, 0, 7, 11),
- One by one = Array (6, 30, 29, 30, 29, 29, 30, 29, 29, 30, 30, 29, 30, 30, 8, 12),
- Array (0, 30, 29, 30, 29, 29, 30, 29, 29, 30, 30, 29, 30, 0, 9, 1),
- Array (0, 30, 30, 29, 30, 29, 29, 30, 29, 29, 30, 29, 30, 0, 10, 2),
- + = Array (5, 30, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 29, 30, 1, 3),
- + = Array (0, 30, 29, 30, 30, 29, 30, 29, 30, 29, 30, 29, 30, 0, 2, 4),
- + = Array (0, 29, 30, 29, 30, 29, 30, 30, 29, 30, 29, 30, 29, 0, 3, 5),
- + = Array (2, 30, 29, 29, 30, 29, 30, 30, 29, 30, 30, 29, 30, 29, 4, 6),
- + = Array (0, 30, 29, 29, 30, 29, 30, 29, 30, 30, 29, 30, 30, 0, 5, 7),
- + = Array (7, 29, 30, 29, 29, 30, 29, 29, 30, 30, 29, 30, 30, 30, 6, 8),
- + = Array (0, 29, 30, 29, 29, 30, 29, 29, 30, 30, 29, 30, 30, 0, 7, 9),
- + = Array (0, 30, 29, 30, 29, 29, 30, 29, 29, 30, 29, 30, 30, 0, 8, 10),
- + = Array (5, 30, 29, 30, 30, 29, 29, 30, 29, 29, 30, 29, 30, 30, 9, 11),
- + = Array (0, 29, 30, 30, 29, 30, 29, 30, 29, 29, 30, 29, 30, 0, 10, 12),
- Array (0, 29, 30, 30, 29, 30, 30, 29, 30, 29, 30, 29, 29, 0, 1, 1),
- + = Array (4, 30, 29, 30, 29, 30, 30, 29, 30, 30, 29, 30, 29, 30, 2, 2),
- + = Array (0, 29, 29, 30, 29, 30, 29, 30, 30, 29, 30, 30, 29, 0, 3, 3),
- + = Array (0, 30, 29, 29, 30, 29, 30, 29, 30, 29, 30, 30, 30, 0, 4, 4),
- + = Array (2, 29, 30, 29, 29, 30, 29, 29, 30, 29, 30, 30, 30, 30, 5, 5),
- + = Array (0, 29, 30, 29, 29, 30, 29, 29, 30, 29, 30, 30, 30, 0, 6, 6),
- + = Array (6, 29, 30, 30, 29, 29, 30, 29, 29, 30, 29, 30, 30, 29, 7, 7),
- + = Array (0, 30, 30, 29, 30, 29, 30, 29, 29, 30, 29, 30, 29, 0, 8, 8),
- + = Array (0, 30, 30, 30, 29, 30, 29, 30, 29, 29, 30, 29, 30, 0, 9, 9),
- = = Array (5, 29, 30, 30, 29, 30, 30, 29, 30, 29, 30, 29, 29, 30, 10, 10),
- + = Array (0, 29, 30, 29, 30, 30, 29, 30, 29, 30, 30, 29, 30, 0, 1, 11),
- Array (0, 29, 29, 30, 29, 30, 29, 30, 30, 29, 30, 30, 29, 0, 2, 12),
- The array (3, 30, 29, 29, 30, 29, 29, 30, 30, 29, 30, 30, 30, 29, 3, 1),
- Panax Notoginseng = Array (0, 30, 29, 29, 30, 29, 29, 30, 29, 30, 30, 30, 29, 0, 4, 2),
- + = Array (7, 30, 30, 29, 29, 30, 29, 29, 30, 29, 30, 30, 29, 30, 5, 3),
- The "=" Array (0, 30, 30, 29, 29, 30, 29, 29, 30, 29, 30, 29, 30, 0, 6, 4),
- + = Array (0, 30, 30, 29, 30, 29, 30, 29, 29, 30, 29, 30, 29, 0, 7, 5),
- The array (6, 30, 30, 29, 30, 30, 29, 30, 29, 29, 30, 29, 30, 29, 8, 6),
- 0, 30, 29, 30, 30, 29, 30, 29, 30, 29, 30, 29, 30, 0, 9, 7,
- + = Array (0, 29, 30, 29, 30, 29, 30, 30, 29, 30, 29, 30, 29, 0, 10, 8),
- +-= Array (4, 30, 29, 30, 29, 30, 29, 30, 29, 30, 30, 29, 30, 30, 1, 9),
- A/= Array (0, 29, 29, 30, 29, 29, 30, 29, 30, 30, 30, 29, 30, 0, 2, 10),
- + = Array (0, 30, 29, 29, 30, 29, 29, 30, 29, 30, 30, 29, 30, 0, 3, 11),
- + = Array (2, 30, 30, 29, 29, 30, 29, 29, 30, 29, 30, 29, 30, 30, 4, 12),
- = = Array (0, 30, 29, 30, 29, 30, 29, 29, 30, 29, 30, 29, 30, 0, 5, 1),
- = = Array (7, 30, 29, 30, 30, 29, 30, 29, 29, 30, 29, 30, 29, 30, 6, 2),
- Array (0, 29, 30, 30, 29, 30, 30, 29, 29, 30, 29, 30, 29, 0, 7, 3),
- Wuyi = = Array (0, 30, 29, 30, 30, 29, 30, 29, 30, 29, 30, 29, 30, 0, 8, 4),
- In the array (5, 29, 30, 29, 30, 29, 30, 29, 30, 30, 29, 30, 29, 30, 9, 5),
- + = Array (0, 29, 30, 29, 29, 30, 30, 29, 30, 30, 29, 30, 29, 0, 10, 6),
- The array (0, 30, 29, 30, 29, 29, 30, 29, 30, 30, 29, 30, 30, 0, 1, 7),
- + = Array (3, 29, 30, 29, 30, 29, 29, 30, 29, 30, 29, 30, 30, 30, 2, 8),
- + = Array (0, 29, 30, 29, 30, 29, 29, 30, 29, 30, 29, 30, 30, 0, 3, 9),
- + = Array (8, 30, 29, 30, 29, 30, 29, 29, 30, 29, 30, 29, 30, 29, 4, 10),
- + = Array (0, 30, 30, 30, 29, 30, 29, 29, 30, 29, 30, 29, 30, 0, 5, 11),
- (0, 29, 30, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 0, 6, 12),
- Array (6, 30, 29, 30, 29, 30, 30, 29, 30, 29, 30, 29, 30, 29, 7, 1),
- (0, 30, 29, 30, 29, 30, 29, 30, 30, 29, 30, 29, 30, 0, 8, 2),
- + = Array (0, 29, 30, 29, 29, 30, 29, 30, 30, 29, 30, 30, 29, 0, 9, 3),
- + = Array (4, 30, 29, 30, 29, 29, 30, 29, 30, 29, 30, 30, 30, 29, 10, 4),
- + = Array (0, 30, 29, 30, 29, 29, 30, 29, 30, 29, 30, 30, 30, 0, 1, 5),
- + = Array (0, 29, 30, 29, 30, 29, 29, 30, 29, 29, 30, 30, 29, 0, 2, 6),
- $ = Array (3, 30, 30, 30, 29, 30, 29, 29, 30, 29, 29, 30, 30, 29, 3, 7),
- 0, 30, 30, 29, 30, 30, 29, 29, 30, 29, 30, 29, 30, 0, 4, 8,
- (7, 29, 30, 29, 30, 30, 29, 30, 29, 30, 29, 30, 29, 30, 5, 9),
- The array (0, 29, 30, 29, 30, 29, 30, 30, 29, 30, 29, 30, 29, 0, 6, 10),
- + = Array (0, 30, 29, 29, 30, 29, 30, 30, 29, 30, 30, 29, 30, 0, 7, 11),
- + = Array (5, 29, 30, 29, 29, 30, 29, 30, 29, 30, 30, 30, 29, 30, 8, 12),
- + = Array (0, 29, 30, 29, 29, 30, 29, 30, 29, 30, 30, 29, 30, 0, 9, 1),
- (0, 30, 29, 30, 29, 29, 30, 29, 29, 30, 30, 29, 30, 0, 10, 2),
- 4, 30, 30, 29, 30, 29, 29, 30, 29, 29, 30, 30, 29, 30, 1, 3,
- The array (0, 30, 30, 29, 30, 29, 29, 30, 29, 29, 30, 29, 30, 0, 2, 4),
- + = Array (8, 30, 30, 29, 30, 29, 30, 29, 30, 29, 29, 30, 29, 30, 3, 5),
- The + = Array (0, 30, 29, 30, 30, 29, 30, 29, 30, 29, 30, 29, 29, 0, 4, 6),
- + = Array (0, 30, 29, 30, 30, 29, 30, 30, 29, 30, 29, 30, 29, 0, 5, 7),
- + = Array (6, 30, 29, 29, 30, 29, 30, 30, 29, 30, 30, 29, 30, 29, 6, 8),
- + = Array (0, 30, 29, 29, 30, 29, 30, 29, 30, 30, 29, 30, 30, 0, 7, 9),
- Bayi = Array (0, 29, 30, 29, 29, 30, 29, 29, 30, 30, 29, 30, 30, 0, 8, 10),
- (4, 30, 29, 30, 29, 29, 30, 29, 29, 30, 29, 30, 30, 30, 9, 11),
- The same as array (0, 30, 29, 30, 29, 29, 30, 29, 29, 30, 29, 30, 30, 0, 10, 12),
- + = Array (10, 30, 29, 30, 30, 29, 29, 30, 29, 29, 30, 29, 30, 30, 1, 1),
- $ = Array (0, 29, 30, 30, 29, 30, 29, 30, 29, 29, 30, 29, 30, 0, 2, 2),
- + = Array (0, 29, 30, 30, 29, 30, 30, 29, 30, 29, 30, 29, 29, 0, 3, 3),
- The array (6, 30, 29, 30, 29, 30, 30, 29, 30, 30, 29, 30, 29, 29, 4, 4),
- The array (0, 30, 29, 30, 29, 30, 29, 30, 30, 29, 30, 30, 29, 0, 5, 5),
- In the array (0, 30, 29, 29, 30, 29, 29, 30, 30, 29, 30, 30, 30, 0, 6, 6),
- + = Array (5, 29, 30, 29, 29, 30, 29, 29, 30, 29, 30, 30, 30, 30, 7, 7),
- The 0, 29, 30, 29, 29, 30, 29, 29, 30, 29, 30, 30, 30, 0, 8, 8,
- the "= =" Array (0, 29, 30, 30, 29, 29, 30, 29, 29, 30, 29, 30, 30, 0, 9, 9),
- (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),
- The array (8, 29, 30, 30, 29, 30, 29, 30, 30, 29, 29, 30, 29, 30, 2, 12),
- + = Array (0, 29, 30, 29, 30, 30, 29, 30, 29, 30, 30, 29, 29, 0, 3, 1),
- $ = 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),
- (0, 30, 29, 29, 30, 29, 29, 30, 29, 30, 30, 30, 29, 0, 6, 4),
- + = 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),
- + = 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),
- + = 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),
- The 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),
- [+] Array (9, 29, 30, 29, 30, 29, 30, 29, 30, 30, 29, 30, 29, 30, 1, 7),
- (0, 29, 30, 29, 29, 30, 29, 30, 30, 30, 29, 30, 29, 0, 2, 8),
- The $ = 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),
- + = Array (4, 29, 30, 30, 30, 29, 30, 29, 29, 30, 29, 30, 29, 30, 7, 1)
- );
- $mten = $lnlunarcalendar [' Tiangan '];//lunar zodiac
- $mtwelve = $lnlunarcalendar [' Dizhi '];//lunar earthly Branches
- $mmonth = $lnlunarcalendar [' Month '];//lunar month
- $mday = $lnlunarcalendar [' Day '];//lunar calendar
- Total Gregorian calendar days to December 21, 1900
- $total = 69 * 365 + 17 + 11;
- Not until January 1, 1970.
- if ($year = = "" | | $month = = "" | | ($year < 1970 or $year > 2020)) Return '; Beyond this range is not counted
- Total number of days to be calculated for the Gregorian calendar date-starting from December 21, 1900
- for ($y = 1970; $y < $year; $y + +) {//first-year and
- $total + = 365;
- if ($y% 4 = = 0) $total + +;
- }
- Plus a few months in the year.
- $total + = gmdate ("Z", gmmktime (0, 0, 0, $month, 1, $year));
- Use the number of days of the lunar calendar to determine whether to exceed the Gregorian calendar days
- $flag 1 = 0; Determine the conditions for jumping out of a loop
- $LCJ = 0;
- while ($LCJ <= 120) {
- $lci = 1;
- while ($lci <= 13) {
- $mtotal + = $everymonth [$LCJ] [$LCI];
- if ($mtotal >= $total) {
- $flag 1 = 1;
- Break
- }
- $lci + +;
- }
- if ($flag 1 = = 1) break;
- $LCJ + +;
- }
- From above, get the $LCI for the current lunar month, $LCJ for the current agricultural calendar year
- Calculate the lunar date for the 1th month
- $fisrtdaylunar = $everymonth [$LCJ] [$lci]-($mtotal-$total);
- $results [' year '] = $mten [$everymonth [$LCJ][14]]. $mtwelve [$everymonth [$LCJ][15]]; What year is it now?
- $daysthismonth = gmdate ("T", gmmktime (0, 0, 0, $month, 1, $year)); The current month a few days
- $op = 1;
- for ($i = 1; $i <= $daysthismonth; $i + +) {
- $possiblelunarday = $fisrtdaylunar + $op-1; The Chinese lunar day after the theory is superimposed
- if ($possiblelunarday <= $everymonth [$LCJ] [$lci]) {//within the days of the month
- $results [$i] = $mday [$possiblelunarday];
- $op + = 1;
- }
- else {//not within the number of days of the month
- $results [$i] = $mday [1]; Back to 1st
- $fisrtdaylunar = 1;
- $op = 2;
- $curmonthnum = ($everymonth [$LCJ][0]! = 0)? 13:12; A few months ago.
- if ($lci + 1 > $curmonthnum) {//13th/14 months, go to next year
- $lci = 1;
- $LCJ = $LCJ + 1;
- For a year, and to write the new zodiac
- $results [' year ']. = '/'. $mten [$everymonth [$LCJ][14]]. $mtwelve [$everymonth [$LCJ][15]];
- }
- else {//still in this year
- $lci = $lci + 1;
- $LCJ = $LCJ;
- }
- }
- if ($results [$i] = = $mday [1]) {//each month should show what month it is
- if ($everymonth [$LCJ][0]! = 0) {//year with leap month
- $MONTHSS = ($lci > $everymonth [$lcj][0])? ($lci-1): $LCI; Number of months after the leap month-1
- if ($lci = = $everymonth [$LCJ][0] + 1) {//This month happens to be leap months
- $monthssshow = $mmonth [0]. $mmonth [$MONTHSS]; Add a leap word in front
- $runyue = 1;
- }
- else {
- $monthssshow = $mmonth [$MONTHSS];
- }
- }
- else {
- $MONTHSS = $lci;
- $monthssshow = $mmonth [$MONTHSS];
- }
- if ($MONTHSS <= && $runyue! = 1) {//only 1 words of month plus ' month ' word
- $monthssshow. = $mmonth [13];
- }
- $results [$i] = $monthssshow;
- }
- }
- return $results;
- }
- Forgot to add this: Chinese lunar word
- $lnlunarcalendar = Array (
- ' Tiangan ' = = Array ("Unknown", "a", "B", "C", "Ding", "E", "Self", "Geng", "Xin", "Ren", "decyl"),
- ' Dizhi ' = = Array ("Unknown", "Child of the Year (rat)", "Ugly Year (ox)", "Yin Year (Tiger)", "Mao Year (Rabbit)", "Chen Year (Dragon)",
- "Years (Snakes)", "Noon (horse)", "Not Years (sheep)", "Dynasty (monkey)", "Unitary year (chicken)", "Xu Year (dog)", "Hai Year (pig)"),
- ' Month ' = = Array ("Leap", "positive", "two", "three", "four", "Five", "VI",
- "Seven", "eight", "Nine", "Ten", "11", "12", "month"),
- ' Day ' = = Array ("Unknown", "The Day", "second day", "Third Day", "four", "Duanwu", "Arrest", "When初七because", "Holidays", "Penggushan", "decade",
- "11", "12", "13", "14", "XV", "16", "17", "18", "19", "20",
- "21", "22", "23", "24", "25", "26", "27", "28", "29", "30")
- );
Copy Code |