这篇文章主要介绍了PHP 实现公历日期与农历日期的互转换的相关资料,希望通过本文大家能帮助到大家,需要的朋友可以参考下
PHP 实现公历日期与农历日期的互转换
前言:
今天根据客户的需求对时间进行了转换,就是客户要求增加农历日期的显示,在网上抄袭了一段,稍微修改了一下运行成功了,不难的,改动的很少的.
示例代码:
<?php /* * * 陈海波 新二级页面 农历转换成公历 * * */ // lunar.php 新建这个php文件,所有的代码无需改,需要改的是下面teacher.php 的几行 class Lunar { private $_SMDay = array(1 => 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);//定义公历月分天数 private $_LStart = 1950 ;//农历从1950年开始 private $_LMDay = array( //差:该年的农历正月初一到该年公历1月1日的天数;1~12:农历月份天数;闰:如有闰月,记录该月平月天数 // 差 1 2 3 4 5 6 7 8 9 10 11 12 闰 array(47,29,30,30,29,30,30,29,29,30,29,30,29), array(36,30,29,30,30,29,30,29,30,29,30,29,30), array(6,29,30,29,30,59,29,30,30,29,30,29,30,29), //五月29 闰五月30 array(44,29,30,29,29,30,30,29,30,30,29,30,29), array(33,30,29,30,29,29,30,29,30,30,29,30,30), array(23,29,30,59,29,29,30,29,30,29,30,30,30,29), //三月29 闰三月30 array(42,29,30,29,30,29,29,30,29,30,29,30,30), array(30,30,29,30,29,30,29,29,59,30,29,30,29,30), //八月30 闰八月29 array(48,30,30,30,29,30,29,29,30,29,30,29,30), array(38,29,30,30,29,30,29,30,29,30,29,30,29), array(27,30,29,30,29,30,59,30,29,30,29,30,29,30), //六月30 闰六月29 array(45,30,29,30,29,30,29,30,30,29,30,29,30), array(35,29,30,29,29,30,29,30,30,29,30,30,29), array(24,30,29,30,58,30,29,30,29,30,30,30,29,29), //四月29 闰四月29 array(43,30,29,30,29,29,30,29,30,29,30,30,30), array(32,29,30,29,30,29,29,30,29,29,30,30,29), array(20,30,30,59,30,29,29,30,29,29,30,30,29,30), //三月30 闰三月29 array(39,30,30,29,30,30,29,29,30,29,30,29,30), array(29,29,30,29,30,30,29,59,30,29,30,29,30,30), //七月30 闰七月29 array(47,29,30,29,30,29,30,30,29,30,29,30,29), array(36,30,29,29,30,29,30,30,29,30,30,29,30), array(26,29,30,29,29,59,30,29,30,30,30,29,30,30), //五月30 闰五月29 array(45,29,30,29,29,30,29,30,29,30,30,29,30), array(33,30,29,30,29,29,30,29,29,30,30,29,30), array(22,30,30,29,59,29,30,29,29,30,30,29,30,30), //四月30 闰四月29 array(41,30,30,29,30,29,29,30,29,29,30,29,30), array(30,30,30,29,30,29,30,29,59,29,30,29,30,30), //八月30 闰八月29 array(48,30,29,30,30,29,30,29,30,29,30,29,29), array(37,30,29,30,30,29,30,30,29,30,29,30,29), array(27,30,29,29,30,29,60,29,30,30,29,30,29,30), //六月30 闰六月30 array(46,30,29,29,30,29,30,29,30,30,29,30,30), array(35,29,30,29,29,30,29,29,30,30,29,30,30), array(24,30,29,30,58,30,29,29,30,29,30,30,30,29), //四月29 闰四月29 array(43,30,29,30,29,29,30,29,29,30,29,30,30), array(32,30,29,30,30,29,29,30,29,29,59,30,30,30), //十月30 闰十月29 array(50,29,30,30,29,30,29,30,29,29,30,29,30), array(39,29,30,30,29,30,30,29,30,29,30,29,29), array(28,30,29,30,29,30,59,30,30,29,30,29,29,30), //六月30 闰六月29 array(47,30,29,30,29,30,29,30,30,29,30,30,29), array(36,30,29,29,30,29,30,29,30,29,30,30,30), array(26,29,30,29,29,59,29,30,29,30,30,30,30,30), //五月30 闰五月29 array(45,29,30,29,29,30,29,29,30,29,30,30,30), array(34,29,30,30,29,29,30,29,29,30,29,30,30), array(22,29,30,59,30,29,30,29,29,30,29,30,29,30), //三月30 闰三月29 array(40,30,30,30,29,30,29,30,29,29,30,29,30), array(30,29,30,30,29,30,29,30,59,29,30,29,30,30), //八月30 闰八月29 array(49,29,30,29,30,30,29,30,29,30,30,29,29), array(37,30,29,30,29,30,29,30,30,29,30,30,29), array(27,30,29,29,30,58,30,30,29,30,30,29,30,29), //五月29 闰五月29 array(46,30,29,29,30,29,29,30,29,30,30,30,29), array(35,30,30,29,29,30,29,29,30,29,30,30,29), array(23,30,30,29,59,30,29,29,30,29,30,29,30,30), //四月30 闰四月29 array(42,30,30,29,30,29,30,29,29,30,29,30,29), array(31,30,30,29,30,30,29,30,29,29,30,29,30), array(21,29,59,30,30,29,30,29,30,29,30,29,30,30), //二月30 闰二月29 array(39,29,30,29,30,29,30,30,29,30,29,30,29), array(28,30,29,30,29,30,29,59,30,30,29,30,30,30), //七月30 闰七月29 array(48,29,29,30,29,29,30,29,30,30,30,29,30), array(37,30,29,29,30,29,29,30,29,30,30,29,30), array(25,30,30,29,29,59,29,30,29,30,29,30,30,30), //五月30 闰五月29 array(44,30,29,30,29,30,29,29,30,29,30,29,30), array(33,30,29,30,30,29,30,29,29,30,29,30,29), array(22,30,29,30,59,30,29,30,29,30,29,30,29,30), //四月30 闰四月29 array(40,30,29,30,29,30,30,29,30,29,30,29,30), array(30,29,30,29,30,29,30,29,30,59,30,29,30,30), //九月30 闰九月29 array(49,29,30,29,29,30,29,30,30,30,29,30,29), array(38,30,29,30,29,29,30,29,30,30,29,30,30), array(27,29,30,29,30,29,59,29,30,29,30,30,30,29), //六月29 闰六月30 array(46,29,30,29,30,29,29,30,29,30,29,30,30), array(35,30,29,30,29,30,29,29,30,29,29,30,30), array(24,29,30,30,59,30,29,29,30,29,30,29,30,30), //四月30 闰四月29 array(42,29,30,30,29,30,29,30,29,30,29,30,29), array(31,30,29,30,29,30,30,29,30,29,30,29,30), array(21,29,59,29,30,30,29,30,30,29,30,29,30,30), //二月30 闰二月29 array(40,29,30,29,29,30,29,30,30,29,30,30,29), array(28,30,29,30,29,29,59,30,29,30,30,30,29,30), //六月30 闰六月29 array(47,30,29,30,29,29,30,29,29,30,30,30,29), array(36,30,30,29,30,29,29,30,29,29,30,30,29), array(25,30,30,30,29,59,29,30,29,29,30,30,29,30), //五月30 闰五月29 array(43,30,30,29,30,29,30,29,30,29,29,30,30), array(33,29,30,29,30,30,29,30,29,30,29,30,29), array(22,29,30,59,30,29,30,30,29,30,29,30,29,30), //三月30 闰三月29 array(41,30,29,29,30,29,30,30,29,30,30,29,30), array(30,29,30,29,29,30,29,30,29,30,30,59,30,30), //十一月30 闰十一月29 array(49,29,30,29,29,30,29,30,29,30,30,29,30), array(38,30,29,30,29,29,30,29,29,30,30,29,30), array(27,30,30,29,30,29,59,29,29,30,29,30,30,29), //六月29 闰六月30 array(45,30,30,29,30,29,29,30,29,29,30,29,30), array(34,30,30,29,30,29,30,29,30,29,29,30,29), array(23,30,30,29,30,59,30,29,30,29,30,29,29,30), //五月30 闰五月29 array(42,30,29,30,30,29,30,29,30,30,29,30,29), array(31,29,30,29,30,29,30,30,29,30,30,29,30), array(21,29,59,29,30,29,30,29,30,30,29,30,30,30), //二月30 闰二月29 array(40,29,30,29,29,30,29,29,30,30,29,30,30), array(29,30,29,30,29,29,30,58,30,29,30,30,30,29), //七月29 闰七月29 array(47,30,29,30,29,29,30,29,29,30,29,30,30), array(36,30,29,30,29,30,29,30,29,29,30,29,30), array(25,30,29,30,30,59,29,30,29,29,30,29,30,29), //五月29 闰五月30 array(44,29,30,30,29,30,30,29,30,29,29,30,29), array(32,30,29,30,29,30,30,29,30,30,29,30,29), array(22,29,30,59,29,30,29,30,30,29,30,30,29,29), //三月29 闰三月30 ); //是否闰年 private function IsLeapYear($AYear) { return ($AYear % 4 == 0) && (($AYear % 100 != 0) || ($AYear % 400 == 0)); } //公历该月的天数(year:年份; month:月份) private function GetSMon($year,$month) { if($this->IsLeapYear($year) && $month == 2) return 29; else return $this->_SMDay[$month]; } //农历名称转换 private function LYearName($year) { $Name = array("零","一","二","三","四","五","六","七","八","九"); for($i=0;$i<4;$i++) for($k=0;$k<10;$k++) if($year[$i]==$k) $tmp.=$Name[$k]; return $tmp; } private function LMonName($month) { if($month >=1 && $month <=12 ) { $Name = array( 1=>"正","二","三","四","五","六","七","八","九","十","十一","十二"); return $Name[$month]; } return $month; } private function LDayName($day) { if($day >=1 && $day <=30 ) { $Name = array( 1 => "初一","初二","初三","初四","初五","初六","初七","初八","初九","初十", "十一","十二","十三","十四","十五","十六","十七","十八","十九","二十", "廿一","廿二","廿三","廿四","廿五","廿六","廿七","廿八","廿九","三十" ); return $Name[$day]; } return $day; } //公历转农历(Sdate:公历日期) public function S2L($date) { list($year, $month, $day) = explode("-", $date); if($year <= 1951 || $month <= 0 || $day <= 0 || $year >= 2051 ) return false; //获取查询日期到当年1月1日的天数 $date1 = strtotime($year."-01-01");//当年1月1日 $date2 = strtotime($year."-".$month."-".$day); $days=round(($date2-$date1)/3600/24); $days += 1; //获取相应年度农历数据,化成数组Larray $Larray = $this->_LMDay[$year - $this->_LStart]; if($days <= $Larray[0]) { $Lyear = $year - 1; $days = $Larray[0] - $days; $Larray = $this->_LMDay[$Lyear - $this->_LStart]; if($days < $Larray[12]) { $Lmonth = 12; $Lday = $Larray[12] - $days; } else { $Lmonth = 11; $days = $days - $Larray[12]; $Lday = $Larray[11] - $days; } } else { $Lyear = $year; $days = $days - $Larray[0]; for($i = 1;$i <= 12;$i++) { if($days > $Larray[$i]) $days = $days - $Larray[$i]; else { if ($days > 30){ $days = $days - $Larray[13]; $Ltype = 1; } $Lmonth = $i; $Lday = $days; break; } } } return mktime(0, 0, 0, $Lmonth, $Lday, $Lyear); //$Ldate = $Lyear."-".$Lmonth."-".$Lday; //$Ldate = $this->LYearName($Lyear)."年".$this->LMonName($Lmonth)."月".$this->LDayName($Lday); //if($Ltype) $Ldate.="(闰)"; //return $Ldate; } //农历转公历(date:农历日期; type:是否闰月) public function L2S($date,$type = 0) { list($year, $month, $day) = split("-",$date); if($year <= 1951 || $month <= 0 || $day <= 0 || $year >= 2051 ) return false; $Larray = $this->_LMDay[$year - $this->_LStart]; if($type == 1 && count($Larray)<=12 ) return false;//要求查询闰,但查无闰月 //如果查询的农历是闰月并该年度农历数组存在闰月数据就获取 if($Larray[$month]>30 && $type == 1 && count($Larray) >=13) $day = $Larray[13] + $day; //获取该年农历日期到公历1月1日的天数 $days = $day; for($i=0;$i<=$month-1;$i++) $days += $Larray[$i]; //当查询农历日期距离公历1月1日超过一年时 if($days > 366 || ($this->GetSMon($month,2)!=29 && $days>365 )) { $Syear = $year +1; if($this->GetSMon($month,2)!=29) $days-=366; else $days-=365; if($days > $this->_SMDay[1]) { $Smonth = 2; $Sday = $days - $this->_SMDay[1]; } else { $Smonth = 1; $Sday = $days; } } else { $Syear =$year; for($i=1;$i<=12;$i++) { if($days > $this->GetSMon($Syear,$i)) $days-=$this->GetSMon($Syear,$i); else { $Smonth = $i; $Sday = $days; break; } } } return mktime(0, 0, 0, $Smonth, $Sday, $Syear); //$Sdate = $Syear."-".$Smonth."-".$Sday; //return $Sdate; } } ?>
teacher.php
//公历转农历 require_once(CORE_."Lunar.php"); // 加载lunar.php文件 $today = date("Y-m-d"); $lunar = new Lunar(); // 实例化类 $nonglitime = array(); $nl = date("Y-n-d",$lunar->S2L($today)); echo $nl;exit; // 转为农历是:2012-05-25
以上是php如何实现公、农历日期的想互转换的实例的详细内容。更多信息请关注PHP中文网其他相关文章!

phpsessionstrackuserdataacrossmultiplepagerequestsusingauniqueIdStoredInacookie.here'showtomanageThemeffectionaly:1)startAsessionWithSessionwwithSession_start()和stordoredAtain $ _session.2)

在PHP中,遍历会话数据可以通过以下步骤实现:1.使用session_start()启动会话。2.通过foreach循环遍历$_SESSION数组中的所有键值对。3.处理复杂数据结构时,使用is_array()或is_object()函数,并用print_r()输出详细信息。4.优化遍历时,可采用分页处理,避免一次性处理大量数据。这将帮助你在实际项目中更有效地管理和使用PHP会话数据。

会话通过服务器端的状态管理机制实现用户认证。1)会话创建并生成唯一ID,2)ID通过cookies传递,3)服务器存储并通过ID访问会话数据,4)实现用户认证和状态管理,提升应用安全性和用户体验。

Tostoreauser'snameinaPHPsession,startthesessionwithsession_start(),thenassignthenameto$_SESSION['username'].1)Usesession_start()toinitializethesession.2)Assigntheuser'snameto$_SESSION['username'].Thisallowsyoutoaccessthenameacrossmultiplepages,enhanc

PHPSession失效的原因包括配置错误、Cookie问题和Session过期。1.配置错误:检查并设置正确的session.save_path。2.Cookie问题:确保Cookie设置正确。3.Session过期:调整session.gc_maxlifetime值以延长会话时间。

在PHP中调试会话问题的方法包括:1.检查会话是否正确启动;2.验证会话ID的传递;3.检查会话数据的存储和读取;4.查看服务器配置。通过输出会话ID和数据、查看会话文件内容等方法,可以有效诊断和解决会话相关的问题。

多次调用session_start()会导致警告信息和可能的数据覆盖。1)PHP会发出警告,提示session已启动。2)可能导致session数据意外覆盖。3)使用session_status()检查session状态,避免重复调用。

在PHP中配置会话生命周期可以通过设置session.gc_maxlifetime和session.cookie_lifetime来实现。1)session.gc_maxlifetime控制服务器端会话数据的存活时间,2)session.cookie_lifetime控制客户端cookie的生命周期,设置为0时cookie在浏览器关闭时过期。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

SublimeText3汉化版
中文版,非常好用

记事本++7.3.1
好用且免费的代码编辑器

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。