首页 > 编程 > PHP > 正文

使用PHP实现汉字拼音转换和公历农历转换

2020-03-22 19:42:21
字体:
来源:转载
供稿:网友
这篇文章主要介绍了PHP实现的汉字拼音转换和公历农历转换类及使用示例,精心整理自网上的资源,需要的朋友可以参考下

本文整理了PHP汉字拼音转换和公历农历转换两个功能类文件,非常实用。比如我们查找通讯录可以通过联系人姓名的拼音首字母来查询,可以通过首字母来导航大数据量,可以通过转换拼音来做网站优化等。公农历转化一般用在日历日程安排的项目中,方便农历的节日提醒等等。

1、PHP汉字转拼音

Pinyin.html' target='_blank'>class.php类文件可以将大多数汉字转换成汉语拼音,当然也有个别生僻字不能转换,如果你想转换所有的汉字拼音的话,可能需要再配合一个汉字字库来实现,使用该类文件就基本能满足你的项目需求了。用法:

require_once( Pinyin.class.php $pinyin = new Pinyin(); $str = 好好学习天天向上 echo $pinyin- strtopin($str);

执行后输出:

hao hao xue xi tian tian xiang shang。

如果只是想输出汉字首字母则使用:

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

执行后输出:

hhxxttxs。

Pinyin.class.php 源码:

 ?phpclass Pinyin{ private $d = array ( array ( -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 ( -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 ( -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 $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;? 

2、PHP公历农历转换
公历转农历的算法非常复杂,涉及到农历润月、干支纪年、生肖等。网络上有很多提供的算法,本文整理的一个Lunar.class.php可以实现公农历互转功能。用法:

require_once( Lunar.class.php $lunar = new Lunar(); $date = $lunar- convertLunarToSolar(2013,8,17); //公历转农历 print_r($date);

执行后输出数组:

Array ( [0] = 二零一三 [1] = 七月 [2] = 十一 [3] = 癸巳 [4] = 7 [5] = 11 [6] = 蛇 [7] = 0 )

如果要将农历转换成公历则使用:

$date = $lunar- convertLunarToSolar(2013,8,17); //农历转公历 print_r($date);

执行后输出数组:

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

Lunar.class.php源码:

 ?phpclass 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 $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); 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 $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 $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 = 正月 , 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;? 

以上整理的两个PHP类,可以满足项目基本需求,但是都有一定的缺陷,比如拼音转换可能会遇到生僻字转换不了,公历转农历你会发现2021年后的转换会出问题了,大家有空可以研究下,如果您有更好的实现代码,欢迎分享。

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP !

相关推荐:

如何实现PHP中MySQL嵌套事务

PHP中余数和取余的用法

以上就是使用PHP实现汉字拼音转换和公历农历转换的详细内容,PHP教程

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表