节假日自动提醒代码分享,阴历,阳历,几月的第几个星期几

bing475879749 2013-04-29 02:33:17
效果如下:

今天是2013-04-29 星期一(农历三月二十) 劳动节还有2天


直接上代码了,如果有代码BUG和和优化欢迎指正与分享

以下是Calendar阳历与阴历与转的类
<?php
class Calendar
{
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->LMonName($Lmonth)."月".$this->LDayName($Lday);
if($Ltype) $Ldate="(闰)".$Ldate;
return $Ldate;
}
//农历转公历(date:农历日期; type:是否闰月)
public function L2S($date,$type = 0)
{
list($year, $month, $day) = preg_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;
}
}
?>
...全文
267 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
皓月长空 2013-06-25
  • 打赏
  • 举报
回复
看看先,踩着脚印前行
西南马 2013-06-25
  • 打赏
  • 举报
回复
我知道今天的农历 和阳历 但是用java该怎样取到最近的假期 我现在是用java做 做不出来啊 求解
bing475879749 2013-04-29
  • 打赏
  • 举报
回复
以下是节日实用代码

$year=date("Y",time());
		$m=date("m",time());
		$d=date("d",time());
		$strd=strtotime(date("Y-m-d",time()));
		$holiday_name="";
		$holiday=array('元旦节','情人节','妇女节','清明节','劳动节','儿童节','教师节','国庆节','万圣节','圣诞节','母亲节','父亲节','春节','元宵节','端午节','七夕情人节','中秋节');
		$date=array('0,1-1','0,2-14','0,3-8','0,4-5','0,5-1','0,6-1','0,9-10','0,10-1','0,10-31','0,10-25','1,5-2|0','1,6-3|0','2,1-1','2,1-15','2,5-5','2,7-7','2,8-15');//数组格式为:第一个数中0代表阳历,其中的1-1为几月几号。第一个数中1代表几月的第几个星期几,其中的5-2|0为5月的第2个星期的星期天,第一个数中2代表农历,其中7-7为七月初七,依此类推
		$week_arr=array('星期日','星期一','星期二','星期三','星期四','星期五','星期六');
		$lunar=new Calendar;//声明农历类
		$nl = $lunar->S2L($year."-".$m."-".$d);//阳历转农历
		foreach($date as $k=>$v){
			$a=explode(",",$v);
			$b=explode("-",$a[1]);
			if($k==0){
				$year=$year+1;
			}else{
				$year=date("Y",time());
			}
			if($a[0]==0){
				$diff=round((strtotime($year."-".$b[0]."-".$b[1])-$strd)/86400);//节日当天与今天的日期差
				if($m==$b[0] && $d==$b[1]){
					$holiday_name=$holiday[$k];
				}elseif($diff<10 && $diff>0){
					$holiday_name="$holiday[$k]还有".$diff."天";
				}
			}elseif($a[0]==1){
				$c=explode("|",$b[1]);
				$firstday = date('w', mktime(0, 0, 0, $m, 1, $year)); //本月1号星期数
				$firstweek = 7 - $firstday; // 第1周天数
				$week = ceil(($d - $firstweek) / 7) + 1;//获取今天是这个月的第几周
				$w=date("w",strtotime($year."-".$m."-".$d));//获取今天是星期几
				$holi_firstday = date('w', mktime(0, 0, 0, $b[0], 1, $year));//节日月1号星期数
				if($holi_firstday==0){
					$holi_firstday=7;
				}
				$day=$c[0]*7-($holi_firstday-1);//获取节日中几月的第几个星期几是阳历多少号
				$diff=round((strtotime($year."-".$b[0]."-".$day)-$strd)/86400);
				if($w==0 && $firstday<>0){//判断第几周(以每个星期的星期一为一周的第一天)
					$week=$week-1;
				}elseif($w<>0 && $firstday==0){
					$week=$week+1;
				}
				if($b[0]==$m && $c[0]==$week && $c[1]==$w){
					$holiday_name=$holiday[$k];
				}elseif($diff<10 && $diff>0){
					$holiday_name="$holiday[$k]还有".$diff."天";
				}
			}elseif($a[0]==2){
				$diff=round(($lunar->L2S($year."-".$b[0]."-".$b[1])-$strd)/86400);//L2S()是农历转阳历,计算日期差
				if($b[0]==$lmonth && $b[1]==$lday){
					$holiday_name=$holiday[$k];
				}elseif($diff<10 && $diff>0){
					$holiday_name="$holiday[$k]还有".$diff."天";
				}
			}
		}
		echo "今天是".$year."-".$m."-".$d."  ".$week_arr[date("w",strtotime($year."-".$m."-".$d))]."(农历".$nl.")  <font color='#FFFF00'>".$holiday_name."</font>";
这是一套古典水墨中国风《清明时节》PPT模板,共24页; PPT模板封面使用了水墨国画绘制的江南水乡、花卉、蝴蝶等图案。左侧放置橙色圆形,填写清明时节PPT标题。界面风格古典雅致。 PowerPoint模板内容页,使用了水墨荷花、古典雨伞、荡秋千、放风筝、扫墓等插图,搭配清明节介绍文字排版。 清明时节PPT内容简介: 一、清明节起源历史 清明节,中国“时年八节”之一,在仲春与暮春之交,即冬至后的第108天,通常为4月4日—6日之中的一天,是祭祖和扫墓的日子,为中国传统节日。自2008年起,清明节与端午节、中秋节一样成为国家法定假日后,也成了一年中重要的“小长假” 清明节是我国民间重要的传统节日,是重要的八个节日:上元、清明、立夏、端午、中元、中秋、冬至和除夕之一。一般是在 公历的四月五日,但其节期很长,有十日前八日后及十日前十日后两种说法,这近二十天内均属清明节。清明节的起源,据传始于古代帝王将相“墓祭”之礼,后来民间亦相仿效,于此日祭祖扫墓,历代沿袭而成为中华民族一种固定的风俗。 相传大禹治水后,人们就用“清明”之语庆贺水患已除,天下太平。此时春暖花开,万物复苏,天清地明,正是春游踏青的好时节。踏青早在唐代就已开始,历代承袭成为习惯。踏青除了欣赏大自然的湖光山色、春光美景之外,还开展各种文娱活动,增添生活情趣。 节气清明与清明节 中国汉族传统的清明节大约始于周朝,距今已有二千五百多年的历史。清明节的起源,据传始于古代帝王将相“墓祭”之礼,后来民间也仿效于此日祭祖扫墓,历代沿袭而成为中华民族一种固定的风俗。清明最早只是一种节气的名称,其变成纪念祖先的节日与寒食节的融入有关。相传春秋时期晋文公为纪念死于火中的忠臣介子推而将其忌日命为寒食节,其后一天定为“清明节”。 “清明节”的得名还源于我国农历24节气中的清明节气。冬至后第105天就是清明节气。清明节气共有15天。作为节气的清明,时间在春分之后。这时冬天已去,春意盎然,天气清朗,四野明净,大自然处处显示出勃勃生机。用“清明”称这个时期,是再恰当不过的一个词。 农谚说 “清明前后,点瓜种豆”、“植树造林,莫过清明”,正是说的这个道理。东汉崔寔《四民月令》记载:“清明节,命蚕妾,治蚕室······”说的是这时开始准备养蚕。其中的“清明节”还只是一个节气,不是节日。 清明节气在时间和天气物侯特点上为清明节俗的形成提供了重要条件,该节气被看作清明节的源流之一。 二、清明节风俗习惯 扫墓 清明节中国历史上,寒食禁火,祭奠先人,早已蔚为习俗。唐朝之后,寒食节逐渐式微,于是清明节扫墓祭祖成了此后持续不断的节俗传统。唐朝大诗人白居易《寒食野望吟》诗云:"乌啼鹊噪昏乔木,清明寒食谁家哭?风吹旷野纸钱飞,古墓累累春草绿。棠梨花映白杨树,尽是生死离别处。冥漠重泉哭不闻,萧萧暮雨人归去。"宋朝诗人高菊卿也曾于《清明》一诗中描写道:"南北山头多墓田,清明扫各纷然。纸灰飞作白蝴蝶,泪血染成红杜鹃。日落狐狸眠冢上,夜归儿女笑灯前。人生有酒须当醉,一滴何曾到九泉。"就是到了今天的社会,人们在清明节前后仍有上坟扫墓祭祖的习俗:铲除杂草,放上供品,于坟前上香祷祝,燃纸钱金锭,或简单地献上一束鲜花,以寄托对先人的怀念 踏青 清明之时,正是春回大地,人们乃因利乘便,扫墓之余亦一家老少在山乡野间游乐一番,回家时顺手折几枝叶芽初绽的柳枝戴在头上,其乐融融。也有的人特意于清明节期间到大自然去欣赏和领略生机勃勃的春日景象,郊外远足,一抒在严冬以来的郁结心胸,这种踏青也叫春游,古代叫探春、寻春。其含义,就是脚踏青草,在郊野游玩,观赏春色。清明前后正是踏青的好时光,所以成为清明节俗的一项重要内容。古时妇女平日不能随便出游,清明扫墓是难得的踏青的机会,故妇女们在清明节比男人玩得更开心,民间有“女人的清明男人的年”之说。 植树 清明前后,春阳照临,春雨飞洒,种植树苗成活率高,成长快。因此,自古以来,中国就有清明植树的习惯。有人还把清明节叫作“植树节”。植树风俗一直流传至今。清明节植树的习俗,发端于清明戴柳插柳的风俗。关于清明戴柳插柳,有三种传说。最古老的传说,是说为了纪念教民稼穑耕作的祖师—神农氏,后来由此发展出祈求长寿的意蕴。再晚点的传说与介子推有关。据说晋文公率众臣登山祭奠介子推时,发现介子推死前曾经靠过的老柳树死而复活,便赐老柳树为“清明柳”。更晚点的传说是唐太宗给大臣柳圈,以示赐福驱疫[16]  。 牵钩 “牵钩”是古称,其实就是现代的拔河运动。据说春秋时,楚国为了进攻吴国,以牵钩这种运动来增强人民的体质。它主要是以一根麻绳,两头分为许多小绳,比赛时,以一面大旗为界,一声令下,双方各自用力拉绳,鼓乐齐鸣,双方助威呐喊,热闹非凡。 荡秋千 秋千最早叫"千秋",相传秋千为春秋时齐桓公从北方民族山戎所传入,汉以后成为清明及其它如端

20,360

社区成员

发帖
与我相关
我的任务
社区描述
“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法利用了C、Java和Perl,该语言的主要目标是允许web开发人员快速编写动态网页。
phpphpstorm 技术论坛(原bbs)
社区管理员
  • 开源资源社区
  • phpstory
  • xuzuning
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧