源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

PHP实现的汉字拼音转换和公历农历转换类及使用示例

  • 时间:2021-06-13 18:06 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:PHP实现的汉字拼音转换和公历农历转换类及使用示例
本文整理了PHP汉字拼音转换和公历农历转换两个功能类文件,非常实用。比如我们查找通讯录可以通过联系人姓名的拼音首字母来查询,可以通过首字母来导航大数据量,可以通过转换拼音来做网站优化等。公农历转化一般用在日历日程安排的项目中,方便农历的节日提醒等等。 [b]1、PHP汉字转拼音[/b] Pinyin.class.php类文件可以将大多数汉字转换成汉语拼音,当然也有个别生僻字不能转换,如果你想转换所有的汉字拼音的话,可能需要再配合一个汉字字库来实现,使用该类文件就基本能满足你的项目需求了。用法:
[u]复制代码[/u] 代码如下:
require_once("Pinyin.class.php"); $pinyin = new Pinyin(); $str = '好好学习天天向上'; echo $pinyin->strtopin($str);
执行后输出:hao hao xue xi tian tian xiang shang。 如果只是想输出汉字首字母则使用:
[u]复制代码[/u] 代码如下:
echo $pinyin->strtopin($str,1);
执行后输出:hhxxttxs。 [b]Pinyin.class.php 源码: [/b]
[u]复制代码[/u] 代码如下:
<?php 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 (    "cuan",    -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 (    "de",    -19006   ),   array (    "deng",    -19003   ),   array (    "di",    -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 (    "en",    -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 (    "jue",    -16657   ),   array (    "jun",    -16647   ),   array (    "ka",    -16474   ),   array (    "kai",    -16470   ),   array (    "kan",    -16465   ),   array (    "kang",    -16459   ),   array (    "kao",    -16452   ),   array (    "ke",    -16448   ),   array (    "ken",    -16433   ),   array (    "keng",    -16429   ),   array (    "kong",    -16427   ),   array (    "kou",    -16423   ),   array (    "ku",    -16419   ),   array (    "kua",    -16412   ),   array (    "kuai",    -16407   ),   array (    "kuan",    -16403   ),   array (    "kuang",    -16401   ),   array (    "kui",    -16393   ),   array (    "kun",    -16220   ),   array (    "kuo",    -16216   ),   array (    "la",    -16212   ),   array (    "lai",    -16205   ),   array (    "lan",    -16202   ),   array (    "lang",    -16187   ),   array (    "lao",    -16180   ),   array (    "le",    -16171   ),   array (    "lei",    -16169   ),   array (    "leng",    -16158   ),   array (    "li",    -16155   ),   array (    "lia",    -15959   ),   array (    "lian",    -15958   ),   array (    "liang",    -15944   ),   array (    "liao",    -15933   ),   array (    "lie",    -15920   ),   array (    "lin",    -15915   ),   array (    "ling",    -15903   ),   array (    "liu",    -15889   ),   array (    "long",    -15878   ),   array (    "lou",    -15707   ),   array (    "lu",    -15701   ),   array (    "lv",    -15681   ),   array (    "luan",    -15667   ),   array (    "lue",    -15661   ),   array (    "lun",    -15659   ),   array (    "luo",    -15652   ),   array (    "ma",    -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 (    "pan",    -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 (    "pie",    -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 (    "qu",    -14345   ),   array (    "quan",    -14170   ),   array (    "que",    -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 (    "sao",    -13914   ),   array (    "se",    -13910   ),   array (    "sen",    -13907   ),   array (    "seng",    -13906   ),   array (    "sha",    -13905   ),   array (    "shai",    -13896   ),   array (    "shan",    -13894   ),   array (    "shang",    -13878   ),   array (    "shao",    -13870   ),   array (    "she",    -13859   ),   array (    "shen",    -13847   ),   array (    "sheng",    -13831   ),   array (    "shi",    -13658   ),   array (    "shou",    -13611   ),   array (    "shu",    -13601   ),   array (    "shua",    -13406   ),   array (    "shuai",    -13404   ),   array (    "shuan",    -13400   ),   array (    "shuang",    -13398   ),   array (    "shui",    -13395   ),   array (    "shun",    -13391   ),   array (    "shuo",    -13387   ),   array (    "si",    -13383   ),   array (    "song",    -13367   ),   array (    "sou",    -13359   ),   array (    "su",    -13356   ),   array (    "suan",    -13343   ),   array (    "sui",    -13340   ),   array (    "sun",    -13329   ),   array (    "suo",    -13326   ),   array (    "ta",    -13318   ),   array (    "tai",    -13147   ),   array (    "tan",    -13138   ),   array (    "tang",    -13120   ),   array (    "tao",    -13107   ),   array (    "te",    -13096   ),   array (    "teng",    -13095   ),   array (    "ti",    -13091   ),   array (    "tian",    -13076   ),   array (    "tiao",    -13068   ),   array (    "tie",    -13063   ),   array (    "ting",    -13060   ),   array (    "tong",    -12888   ),   array (    "tou",    -12875   ),   array (    "tu",    -12871   ),   array (    "tuan",    -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截取UTF-8编码的中英文字符串  */  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);  }  /*  将中英文字符串转换成拼音  */  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){ //转换成首字母      $pinyin .= $this->c($str);     }else{     //转换成全拼      $pinyin .= $this->f($str)." ";     }     $i = $i +1;    } else     break;   }   return $pinyin;  } } ?>
[b]2、PHP公历农历转换 [/b]公历转农历的算法非常复杂,涉及到农历润月、干支纪年、生肖等。网络上有很多提供的算法,本文整理的一个Lunar.class.php可以实现公农历互转功能。用法:
[u]复制代码[/u] 代码如下:
require_once("Lunar.class.php"); $lunar = new Lunar();   $date = $lunar->convertLunarToSolar(2013,8,17); //公历转农历 print_r($date);
执行后输出数组:
[u]复制代码[/u] 代码如下:
Array ( [0] => 二零一三 [1] => 七月 [2] => 十一 [3] => 癸巳  [4] => 7 [5] => 11 [6] => 蛇 [7] => 0 ) 
如果要将农历转换成公历则使用:
[u]复制代码[/u] 代码如下:
$date = $lunar->convertLunarToSolar(2013,8,17); //农历转公历 print_r($date);
执行后输出数组:
[u]复制代码[/u] 代码如下:
Array ( [0] => 2013 [1] => 09 [2] => 21 ) 
[b]Lunar.class.php源码: [/b]
[u]复制代码[/u] 代码如下:
<?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];         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;     }     /**     * 将阴历转换为阳历     * @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 && $year0 !=0) || ($year%400==0));     }     /**      * 获取干支纪年      * @param year      */     function getLunarYearName($year){          $sky = array('庚','辛','壬','癸','甲','乙','丙','丁','戊','己');          $earth = array('申','酉','戌','亥','子','丑','寅','卯','辰','巳','午','未');          $year = $year.'';          return $sky[$year{3}].$earth[$year];     }     /**      * 根据阴历年获取生肖      * @param year 阴历年      */     function getYearZodiac($year){          $zodiac = array('猴','鸡','狗','猪','鼠','牛','虎','兔','龙','蛇','马','羊');          return $zodiac[$year];     }     /**      * 获取阳历月份的天数      * @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'=>31);          return $monthHash["$month"];     }     /**      * 获取阴历月份的天数      * @param year 阴历-年      * @param month 阴历-月,从一月开始      */     function getLunarMonthDays($year,$month){          $monthData = $this->getLunarMonths($year);          return $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<=$i;$j++){                 $temp+=$monthData[$j];             }             array_push($res, $temp);         }          return $res;     }     /**      * 获取闰月      * @param year 阴历年份      */     function getLeapMonth($year){         $yearData = $this->lunarInfo[$year-$this->MIN_YEAR];         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<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)?('闰'.$this->getCapitalNum($t- 1,true)):$this->getCapitalNum(($leapMonth!=0&&$leapMonth+1<$t?($t-1):$t),true);    $my_year = $this->toYear($year);             array_push($lunarArray,$my_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;     }  //转换成中文年份     function toYear($year){   $arr = array("零","一","二","三","四","五","六","七","八","九");   $year_arr = str_split($year);   $str = $arr[$year_arr[0]].$arr[$year_arr[1]].$arr[$year_arr[2]].$arr[$year_arr[3]];   return $str;  }     /**      * 获取数字的阴历叫法      * @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'=&g
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部