Home >Backend Development >PHP Tutorial >Chinese pinyin conversion and Gregorian and lunar calendar conversion classes and usage examples implemented in PHP_PHP tutorial

Chinese pinyin conversion and Gregorian and lunar calendar conversion classes and usage examples implemented in PHP_PHP tutorial

WBOY
WBOYOriginal
2016-07-13 10:26:301022browse

This article has compiled two functional files for PHP Chinese character pinyin conversion and Gregorian and lunar calendar conversion, which are very practical. For example, when we search the address book, we can search by the pinyin initials of the contact's name, we can navigate large amounts of data by the initials, and we can do website optimization by converting pinyin. Public lunar calendar conversion is generally used in calendar scheduling projects to facilitate lunar calendar festival reminders, etc.

1. Convert Chinese characters to Pinyin with PHP

The Pinyin.class.php class file can convert most Chinese characters into Chinese Pinyin. Of course, there are some rare characters that cannot be converted. If you want to convert all Chinese characters into Pinyin, you may need to use another Chinese character library to achieve it. Use this Class files can basically meet your project needs. Usage:

Copy code The code is as follows:

require_once("Pinyin.class.php");
$pinyin = new Pinyin();
$str = 'Study hard and make progress every day';
echo $pinyin->strtopin($str);

Output after execution: hao hao xue xi tian tian xiang shang.
If you just want to output the first letter of a Chinese character, use:
Copy code The code is as follows:

echo $pinyin->strtopin($str,1);

Output after execution: hhxxttxs.

Pinyin.class.php source code:

Copy code The code is as follows:

class Pinyin{
 private $d = array (
  array (
   "a",
   -20319
  ),
  array (
   "ai",
   -20317
  ),
  array (
   "an",
   -20304
  ),
  array (
   "ang",
   -20295
  ),
  array (
   "ao",
   -20292
  ),
  array (
   "ba",
   -20283
  ),
  array (
   "bai",
   -20265
  ),
  array (
   "ban",
   -20257
  ),
  array (
   "bang",
   -20242
  ),
  array (
   "bao",
   -20230
  ),
  array (
   "bei",
   -20051
  ),
  array (
   "ben",
   -20036
  ),
  array (
   "beng",
   -20032
  ),
  array (
   "bi",
   -20026
  ),
  array (
   "bian",
   -20002
  ),
  array (
   "biao",
   -19990
  ),
  array (
   "bie",
   -19986
  ),
  array (
   "bin",
   -19982
  ),
  array (
   "bing",
   -19976
  ),
  array (
   "bo",
   -19805
  ),
  array (
   "bu",
   -19784
  ),
  array (
   "ca",
   -19775
  ),
  array (
   "cai",
   -19774
  ),
  array (
   "can",
   -19763
  ),
  array (
   "cang",
   -19756
  ),
  array (
   "cao",
   -19751
  ),
  array (
   "ce",
   -19746
  ),
  array (
   "ceng",
   -19741
  ),
  array (
   "cha",
   -19739
  ),
  array (
   "chai",
   -19728
  ),
  array (
   "chan",
   -19725
  ),
  array (
   "chang",
   -19715
  ),
  array (
   "chao",
   -19540
  ),
  array (
   "che",
   -19531
  ),
  array (
   "chen",
   -19525
  ),
  array (
   "cheng",
   -19515
  ),
  array (
   "chi",
   -19500
  ),
  array (
   "chong",
   -19484
  ),
  array (
   "chou",
   -19479
  ),
  array (
   "chu",
   -19467
  ),
  array (
   "chuai",
   -19289
  ),
  array (
   "chuan",
   -19288
  ),
  array (
   "chuang",
   -19281
  ),
  array (
   "chui",
   -19275
  ),
  array (
   "chun",
   -19270
  ),
  array (
   "chuo",
   -19263
  ),
  array (
   "ci",
   -19261
  ),
  array (
   "cong",
   -19249
  ),
  array (
   "cou",
   -19243
  ),
  array (
   "cu",
   -19242
  ),
  array (
   "how",
   -19238
  ),
  array (
   "cui",
   -19235
  ),
  array (
   "cun",
   -19227
  ),
  array (
   "cuo",
   -19224
  ),
  array (
   "da",
   -19218
  ),
  array (
   "dai",
   -19212
  ),
  array (
   "dan",
   -19038
  ),
  array (
   "dang",
   -19023
  ),
  array (
   "dao",
   -19018
  ),
  array (
   "of",
   -19006
  ),
  array (
   "deng",
   -19003
  ),
  array (
   "say",
   -18996
  ),
  array (
   "dian",
   -18977
  ),
  array (
   "diao",
   -18961
  ),
  array (
   "die",
   -18952
  ),
  array (
   "ding",
   -18783
  ),
  array (
   "diu",
   -18774
  ),
  array (
   "dong",
   -18773
  ),
  array (
   "dou",
   -18763
  ),
  array (
   "du",
   -18756
  ),
  array (
   "duan",
   -18741
  ),
  array (
   "dui",
   -18735
  ),
  array (
   "dun",
   -18731
  ),
  array (
   "duo",
   -18722
  ),
  array (
   "e",
   -18710
  ),
  array (
   "in",
   -18697
  ),
  array (
   "er",
   -18696
  ),
  array (
   "fa",
   -18526
  ),
  array (
   "fan",
   -18518
  ),
  array (
   "fang",
   -18501
  ),
  array (
   "fei",
   -18490
  ),
  array (
   "fen",
   -18478
  ),
  array (
   "feng",
   -18463
  ),
  array (
   "fo",
   -18448
  ),
  array (
   "fou",
   -18447
  ),
  array (
   "fu",
   -18446
  ),
  array (
   "ga",
   -18239
  ),
  array (
   "gai",
   -18237
  ),
  array (
   "gan",
   -18231
  ),
  array (
   "gang",
   -18220
  ),
  array (
   "gao",
   -18211
  ),
  array (
   "ge",
   -18201
  ),
  array (
   "gei",
   -18184
  ),
  array (
   "gen",
   -18183
  ),
  array (
   "geng",
   -18181
  ),
  array (
   "gong",
   -18012
  ),
  array (
   "gou",
   -17997
  ),
  array (
   "gu",
   -17988
  ),
  array (
   "gua",
   -17970
  ),
  array (
   "guai",
   -17964
  ),
  array (
   "guan",
   -17961
  ),
  array (
   "guang",
   -17950
  ),
  array (
   "gui",
   -17947
  ),
  array (
   "gun",
   -17931
  ),
  array (
   "guo",
   -17928
  ),
  array (
   "ha",
   -17922
  ),
  array (
   "hai",
   -17759
  ),
  array (
   "han",
   -17752
  ),
  array (
   "hang",
   -17733
  ),
  array (
   "hao",
   -17730
  ),
  array (
   "he",
   -17721
  ),
  array (
   "hei",
   -17703
  ),
  array (
   "hen",
   -17701
  ),
  array (
   "heng",
   -17697
  ),
  array (
   "hong",
   -17692
  ),
  array (
   "hou",
   -17683
  ),
  array (
   "hu",
   -17676
  ),
  array (
   "hua",
   -17496
  ),
  array (
   "huai",
   -17487
  ),
  array (
   "huan",
   -17482
  ),
  array (
   "huang",
   -17468
  ),
  array (
   "hui",
   -17454
  ),
  array (
   "hun",
   -17433
  ),
  array (
   "huo",
   -17427
  ),
  array (
   "ji",
   -17417
  ),
  array (
   "jia",
   -17202
  ),
  array (
   "jian",
   -17185
  ),
  array (
   "jiang",
   -16983
  ),
  array (
   "jiao",
   -16970
  ),
  array (
   "jie",
   -16942
  ),
  array (
   "jin",
   -16915
  ),
  array (
   "jing",
   -16733
  ),
  array (
   "jiong",
   -16708
  ),
  array (
   "jiu",
   -16706
  ),
  array (
   "ju",
   -16689
  ),
  array (
   "juan",
   -16664
  ),
  array (
   "play",
   -16657
  ),
  array (
   "One",
   -16647
  ),
  array (
   "but",
   -16474
  ),
  array (
   "eat",
   -16470
  ),
  array (
   "right",
   -16465
  ),
  array (
   "right",
   -16459
  ),
  array (
   "you",
   -16452
  ),
  array (
   "is",
   -16448
  ),
  array (
   "only",
   -16433
  ),
  array (
   "ken",
   -16429
  ),
  array (
   "kong",
   -16427
  ),
  array (
   "you",
   -16423
  ),
  array (
   "with",
   -16419
  ),
  array (
   "core",
   -16412
  ),
  array (
   "quail",
   -16407
  ),
  array (
   "corn",
   -16403
  ),
  array (
   "said",
   -16401
  ),
  array (
   "grandfather",
   -16393
  ),
  array (
   "one",
   -16220
  ),
  array (
   "where",
   -16216
  ),
  array (
   "it",
   -16212
  ),
  array (
   "Lee",
   -16205
  ),
  array (
   "what",
   -16202
  ),
  array (
   "only",
   -16187
  ),
  array (
   "left",
   -16180
  ),
  array (
   "animal",
   -16171
  ),
  array (
   "goat",
   -16169
  ),
  array (
   "empty",
   -16158
  ),
  array (
   "you",
   -16155
  ),
  array (
   "Leah",
   -15959
  ),
  array (
   "Leanne",
   -15958
  ),
  array (
   "fire",
   -15944
  ),
  array (
   "boy",
   -15933
  ),
  array (
   "lie",
   -15920
  ),
  array (
   "lean",
   -15915
  ),
  array (
   "Ling",
   -15903
  ),
  array (
   "back",
   -15889
  ),
  array (
   "long",
   -15878
  ),
  array (
   "lou",
   -15707
  ),
  array (
   "it",
   -15701
  ),
  array (
   "lv",
   -15681
  ),
  array (
   "luan",
   -15667
  ),
  array (
   "walk",
   -15661
  ),
  array (
   "moon",
   -15659
  ),
  array (
   "luo",
   -15652
  ),
  array (
   "but",
   -15640
  ),
  array (
   "mai",
   -15631
  ),
  array (
   "man",
   -15625
  ),
  array (
   "mang",
   -15454
  ),
  array (
   "mao",
   -15448
  ),
  array (
   "me",
   -15436
  ),
  array (
   "mei",
   -15435
  ),
  array (
   "men",
   -15419
  ),
  array (
   "meng",
   -15416
  ),
  array (
   "mi",
   -15408
  ),
  array (
   "mian",
   -15394
  ),
  array (
   "miao",
   -15385
  ),
  array (
   "mie",
   -15377
  ),
  array (
   "min",
   -15375
  ),
  array (
   "ming",
   -15369
  ),
  array (
   "miu",
   -15363
  ),
  array (
   "mo",
   -15362
  ),
  array (
   "mou",
   -15183
  ),
  array (
   "mu",
   -15180
  ),
  array (
   "na",
   -15165
  ),
  array (
   "nai",
   -15158
  ),
  array (
   "nan",
   -15153
  ),
  array (
   "nang",
   -15150
  ),
  array (
   "nao",
   -15149
  ),
  array (
   "ne",
   -15144
  ),
  array (
   "nei",
   -15143
  ),
  array (
   "nen",
   -15141
  ),
  array (
   "neng",
   -15140
  ),
  array (
   "ni",
   -15139
  ),
  array (
   "nian",
   -15128
  ),
  array (
   "niang",
   -15121
  ),
  array (
   "niao",
   -15119
  ),
  array (
   "nie",
   -15117
  ),
  array (
   "nin",
   -15110
  ),
  array (
   "ning",
   -15109
  ),
  array (
   "niu",
   -14941
  ),
  array (
   "nong",
   -14937
  ),
  array (
   "nu",
   -14933
  ),
  array (
   "nv",
   -14930
  ),
  array (
   "nuan",
   -14929
  ),
  array (
   "nue",
   -14928
  ),
  array (
   "nuo",
   -14926
  ),
  array (
   "o",
   -14922
  ),
  array (
   "ou",
   -14921
  ),
  array (
   "pa",
   -14914
  ),
  array (
   "pai",
   -14908
  ),
  array (
   "bread",
   -14902
  ),
  array (
   "pang",
   -14894
  ),
  array (
   "pao",
   -14889
  ),
  array (
   "pei",
   -14882
  ),
  array (
   "pen",
   -14873
  ),
  array (
   "peng",
   -14871
  ),
  array (
   "pi",
   -14857
  ),
  array (
   "pian",
   -14678
  ),
  array (
   "piao",
   -14674
  ),
  array (
   "foot",
   -14670
  ),
  array (
   "pin",
   -14668
  ),
  array (
   "ping",
   -14663
  ),
  array (
   "po",
   -14654
  ),
  array (
   "pu",
   -14645
  ),
  array (
   "qi",
   -14630
  ),
  array (
   "qia",
   -14594
  ),
  array (
   "qian",
   -14429
  ),
  array (
   "qiang",
   -14407
  ),
  array (
   "qiao",
   -14399
  ),
  array (
   "qie",
   -14384
  ),
  array (
   "qin",
   -14379
  ),
  array (
   "qing",
   -14368
  ),
  array (
   "qiong",
   -14355
  ),
  array (
   "qiu",
   -14353
  ),
  array (
   "what",
   -14345
  ),
  array (
   "quan",
   -14170
  ),
  array (
   "what",
   -14159
  ),
  array (
   "qun",
   -14151
  ),
  array (
   "ran",
   -14149
  ),
  array (
   "rang",
   -14145
  ),
  array (
   "rao",
   -14140
  ),
  array (
   "re",
   -14137
  ),
  array (
   "ren",
   -14135
  ),
  array (
   "reng",
   -14125
  ),
  array (
   "ri",
   -14123
  ),
  array (
   "rong",
   -14122
  ),
  array (
   "rou",
   -14112
  ),
  array (
   "ru",
   -14109
  ),
  array (
   "ruan",
   -14099
  ),
  array (
   "rui",
   -14097
  ),
  array (
   "run",
   -14094
  ),
  array (
   "ruo",
   -14092
  ),
  array (
   "sa",
   -14090
  ),
  array (
   "sai",
   -14087
  ),
  array (
   "san",
   -14083
  ),
  array (
   "sang",
   -13917
  ),
  array (
   "meat",
   -13914
  ),
  array (
   "if",
   -13910
  ),
  array (
   "money",
   -13907
  ),
  array (
   "thin",
   -13906
  ),
  array (
   "tea",
   -13905
  ),
  array (
   "tea",
   -13896
  ),
  array (
   "meat",
   -13894
  ),
  array (
   "enter",
   -13878
  ),
  array (
   "shao",
   -13870
  ),
  array (
   "she",
   -13859
  ),
  array (
   "that",
   -13847
  ),
  array (
   "shine",
   -13831
  ),
  array (
   "it",
   -13658
  ),
  array (
   "shou",
   -13611
  ),
  array (
   "shu",
   -13601
  ),
  array (
   "shua",
   -13406
  ),
  array (
   "Shuai",
   -13404
  ),
  array (
   "shuan",
   -13400
  ),
  array (
   "shuang",
   -13398
  ),
  array (
   "bone",
   -13395
  ),
  array (
   "hate",
   -13391
  ),
  array (
   "shuo",
   -13387
  ),
  array (
   "yes",
   -13383
  ),
  array (
   "song",
   -13367
  ),
  array (
   "sou",
   -13359
  ),
  array (
   "name",
   -13356
  ),
  array (
   "suan",
   -13343
  ),
  array (
   "bones",
   -13340
  ),
  array (
   "sun",
   -13329
  ),
  array (
   "suo",
   -13326
  ),
  array (
   "yes",
   -13318
  ),
  array (
   "Shit",
   -13147
  ),
  array (
   "tan",
   -13138
  ),
  array (
   "only",
   -13120
  ),
  array (
   "people",
   -13107
  ),
  array (
   "tea",
   -13096
  ),
  array (
   "still",
   -13095
  ),
  array (
   "you",
   -13091
  ),
  array (
   "Tian",
   -13076
  ),
  array (
   "dude",
   -13068
  ),
  array (
   "tea",
   -13063
  ),
  array (
   "think",
   -13060
  ),
  array (
   "barrel",
   -12888
  ),
  array (
   "tou",
   -12875
  ),
  array (
   "you",
   -12871
  ),
  array (
   "hon",
   -12860
  ),
  array (
   "tui",
   -12858
  ),
  array (
   "tun",
   -12852
  ),
  array (
   "tuo",
   -12849
  ),
  array (
   "wa",
   -12838
  ),
  array (
   "wai",
   -12831
  ),
  array (
   "wan",
   -12829
  ),
  array (
   "wang",
   -12812
  ),
  array (
   "wei",
   -12802
  ),
  array (
   "wen",
   -12607
  ),
  array (
   "weng",
   -12597
  ),
  array (
   "wo",
   -12594
  ),
  array (
   "wu",
   -12585
  ),
  array (
   "xi",
   -12556
  ),
  array (
   "xia",
   -12359
  ),
  array (
   "xian",
   -12346
  ),
  array (
   "xiang",
   -12320
  ),
  array (
   "xiao",
   -12300
  ),
  array (
   "xie",
   -12120
  ),
  array (
   "xin",
   -12099
  ),
  array (
   "xing",
   -12089
  ),
  array (
   "xiong",
   -12074
  ),
  array (
   "xiu",
   -12067
  ),
  array (
   "xu",
   -12058
  ),
  array (
   "xuan",
   -12039
  ),
  array (
   "xue",
   -11867
  ),
  array (
   "xun",
   -11861
  ),
  array (
   "ya",
   -11847
  ),
  array (
   "yan",
   -11831
  ),
  array (
   "yang",
   -11798
  ),
  array (
   "yao",
   -11781
  ),
  array (
   "ye",
   -11604
  ),
  array (
   "yi",
   -11589
  ),
  array (
   "yin",
   -11536
  ),
  array (
   "ying",
   -11358
  ),
  array (
   "yo",
   -11340
  ),
  array (
   "yong",
   -11339
  ),
  array (
   "you",
   -11324
  ),
  array (
   "yu",
   -11303
  ),
  array (
   "yuan",
   -11097
  ),
  array (
   "yue",
   -11077
  ),
  array (
   "yun",
   -11067
  ),
  array (
   "za",
   -11055
  ),
  array (
   "zai",
   -11052
  ),
  array (
   "zan",
   -11045
  ),
  array (
   "zang",
   -11041
  ),
  array (
   "zao",
   -11038
  ),
  array (
   "ze",
   -11024
  ),
  array (
   "zei",
   -11020
  ),
  array (
   "zen",
   -11019
  ),
  array (
   "zeng",
   -11018
  ),
  array (
   "zha",
   -11014
  ),
  array (
   "zhai",
   -10838
  ),
  array (
   "zhan",
   -10832
  ),
  array (
   "zhang",
   -10815
  ),
  array (
   "zhao",
   -10800
  ),
  array (
   "zhe",
   -10790
  ),
  array (
   "zhen",
   -10780
  ),
  array (
   "zheng",
   -10764
  ),
  array (
   "zhi",
   -10587
  ),
  array (
   "zhong",
   -10544
  ),
  array (
   "zhou",
   -10533
  ),
  array (
   "zhu",
   -10519
  ),
  array (
   "zhua",
   -10331
  ),
  array (
   "zhuai",
   -10329
  ),
  array (
   "zhuan",
   -10328
  ),
  array (
   "zhuang",
   -10322
  ),
  array (
   "zhui",
   -10315
  ),
  array (
   "zhun",
   -10309
  ),
  array (
   "zhuo",
   -10307
  ),
  array (
   "zi",
   -10296
  ),
  array (
   "zong",
   -10281
  ),
  array (
   "zou",
   -10274
  ),
  array (
   "zu",
   -10270
  ),
  array (
   "zuan",
   -10262
  ),
  array (
   "zui",
   -10260
  ),
  array (
   "zun",
   -10256
  ),
  array (
   "zuo",
   -10254
  )
 );

function g($num) {
  if ($num > 0 && $num < 160) {
   return chr($num);
  }
  elseif ($num < -20319 || $num > -10247) {
   return "";
  } else {
   for ($i = count($this->d) - 1; $i >= 0; $i--) {
    if ($this->d[$i][1] <= $num)
     break;
   }
   return $this->d[$i][0];
  }
 }

 function c($str) {
  $ret = "";
  for ($i = 0; $i < strlen($str); $i ) {
   $p = ord(substr($str, $i, 1));

   if ($p > 160) {

    $q = ord(substr($str, $i, 1));

    $p = $p * 256 $q -65536;

   }
   $ret .= $this->g($p);

  }
  $ret = substr($ret, 0, 1);
  return $ret;
 }

function f($str) {
$ret = "";
for ($i = 0; $i < strlen($str); $i ) {
$p = ord(substr($str, $i, 1));
if ($p > 160) {
$q = ord(substr($str, $i, 1));
$p = $p * 256 $q -65536;
}
$ret .= $this->g($p);
}
return $ret;
}

/*
PHP intercepts UTF-8 encoded Chinese and English strings
*/
function utf8_substr($str, $from, $len) {
return preg_replace('#^(?:[x00-x7F]|[xC0-xFF][x80-xBF] ){0,' . $from . '}' . '((?:[x00-x7F]|[ xC0-xFF][x80-xBF] ){0,' . $len . '}).*#s', '$1', $str);
}

/*
Convert Chinese and English strings into Pinyin
*/
function strtopin($chinese,$type=0) {
$i = 0;
$pinyin = "";
$arr = array ();
while (1) {
$str = $this->utf8_substr($chinese, $i, 1);
if (!empty ($str)) {
$arr[$i] = $str;
$str = iconv("utf-8", "gb2312", $str);
If($type==1){ //Convert to initial letter
$pinyin .= $this->c($str);
}else{ //Convert to full spelling
$pinyin .= $this->f($str)." ";
}
$i = $i 1;
} else
Break;
}
Return $pinyin;
}
}


?>


2. PHP Gregorian and Lunar Calendar Conversion
The algorithm for converting the Gregorian calendar to the lunar calendar is very complex, involving the lunar calendar, the year of the stems and branches, the zodiac, etc. There are many algorithms provided on the Internet. The Lunar.class.php compiled in this article can realize the function of converting between public and lunar calendars. Usage:
Copy code The code is as follows:

require_once("Lunar.class.php");
$lunar = new Lunar();

$date = $lunar->convertLunarToSolar(2013,8,17); //Convert Gregorian calendar to lunar calendar
print_r($date);

Output array after execution:
Copy code The code is as follows:

Array ( [0] => 2013 [1] => July [2] => November [3] => Guisi
[4] => 7 [5] => 11 [6] => Snake [7] => 0 )

If you want to convert the lunar calendar to the Gregorian calendar, use:
Copy code The code is as follows:

$date = $lunar->convertLunarToSolar(2013,8,17); //Convert lunar calendar to Gregorian calendar
print_r($date);

Output array after execution:
Copy code The code is as follows:

Array ( [0] => 2013 [1] => 09 [2] => 21 )

Lunar.class.php source code:

Copy code The code is as follows:

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)
    );
    /**
* Convert solar calendar to lunar calendar
* @param year Gregorian calendar-year
* @param month Gregorian calendar-month
* @param date Gregorian calendar-day
​​*/
    function convertSolarToLunar($year,$month,$date){
        //debugger;
        $yearData = $this->lunarInfo[$year-$this->MIN_YEAR];
        if($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){
            return array(1891,'正月','初一','辛卯',1,1,'兔');
        }
        $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 lunar calendar to solar calendar
* @param year lunar calendar-year
* @param month Lunar calendar - month, leap month processing: For example, if there is a leap month in May, then the second May will be June, which is equivalent to 13 months in the lunar calendar, but sometimes the number of days in the 13th month is 0
* @param date 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];
        $month= $day[1];
        $day    = $day[2];
        return array($year, $month, $day);
    }
    /**
* Determine whether it is a leap year
* @param year
​​*/
    function isLeapYear($year){
        return (($year%4==0 && $year0 !=0) || ($year@0==0));
    }
    /**
* Get the zodiac signs
* @param year
​​*/
    function getLunarYearName($year){
         $sky = array('庚','辛','壬','癸','甲','乙','丙','丁','戊','己');
         $earth = array('申','酉','戌','亥','子','丑','寅','卯','辰','巳','午','未');
         $year = $year.'';
         return $sky[$year{3}].$earth[$year];
    }
    /**
* Get the zodiac sign according to the lunar year
* @param year lunar year
​​*/
    function getYearZodiac($year){
         $zodiac = array('猴','鸡','狗','猪','鼠','牛','虎','兔','龙','蛇','马','羊');
         return $zodiac[$year];
    }
    /**
* Get the number of days in the solar 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 in the lunar month
* @param year lunar calendar-year
* @param month lunar calendar month, starting from January
​​*/
    function getLunarMonthDays($year,$month){
         $monthData = $this->getLunarMonths($year);
         return $monthData[$month-1];
    }
    /**
* * Get the array of days in each month of the lunar calendar
* @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             $bitArray[$i] = $bitArray[$i] 29;
        }
        return $bitArray;
    }
    /**
* Get the number of days in each year of the lunar calendar
* @param year lunar 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<=$i;$j ){
                $temp =$monthData[$j];
            }
            array_push($res, $temp);
        }
         return $res;
    }
    /**
* Get leap month
* @param year lunar year
​​*/
    functio

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn