站长资讯网
最全最丰富的资讯网站

怎么通过PHP判断指定月份共有几天

在上一篇文章《php循环学习十:判定水仙花数,打印全部水仙花数》中,我们介绍了判定水仙花数,并使用for循环输出全部水仙花数的方法。这次我们来看看日期时间,介绍一下使用PHP怎么获得某年、某月的最大天数。

本文的主题是:给定一个年份和月份,判断该月份共有几天。

我们都知道一年月份的最大天数分4种情况:

  • 大月:31天;

  • 小月:30天;

  • 闰年2月:29天

  • 平年2月:28天

而每年固定1、3、5、7、8、10、12月份为大月,而4、6、9、11月份为小月。

所以我们可以使用选择控制语句switch case来进行一个判断选择:

当月份$month为1、3、5、7、8、10、12则输出31;当$month为4、6、9、11则输出30。代码可以这样写:

switch($month){ case 1: case 3: case 5: case 7: case 8: case 10: case 12: 	echo "$month 月共有31天";break; case 4: case 6: case 9: case 11: 	echo "$month 月共有30天";break; }

测试一下:

$month=1,则会输出:

怎么通过PHP判断指定月份共有几天

$month=4,则会输出:

怎么通过PHP判断指定月份共有几天

说明:switch 语句会根据表达式的值,依次与 case 中的值进行比较,如果不相等,继续查找下一个 case;如果相等,就会执行对应的语句,直到 switch 语句结束或遇到 break 为止。

OK,大月和小月的判断还是很简单的,就剩下一个2月了,计算2月的天数,首先需要判断该年是不是闰年。我们可以使用下面一个函数来实现:(具体可以阅读文章《PHP如何输出20世纪的所有闰年》)

function IsLeapYear($year){    return ($year % 400 == 0 || $year % 4 == 0 && $year % 100 != 0); }

如果给定年份是闰年则会返回true或1,如果不是闰年(是平年)则返回false或0。

然后在switch case语句中调用IsLeapYear($year)函数来进行判断:

case 2: 	echo IsLeapYear($year)? "$month 月共有29天" : "$month 月共有28天";break;

三元运算符

表达式1?表达式2:表达式3

表示:如果条件“表达式1”成立,则执行语句“表达式2”,否则执行“表达式3”。

我们还可以加一个default分支,用来在用户输入除1~12月份的数时,进行提醒:

default:echo '输入错误,请输入1-12之间的数';break;

好了,将上面的代码封装为一个功能函数:

function IsLeapYear($year){    return ($year % 400 == 0 || $year % 4 == 0 && $year % 100 != 0); } function GetMaxDay($year,$month) { 	switch($month){ 	case 1: 	case 3: 	case 5: 	case 7: 	case 8: 	case 10: 	case 12: 		echo "$year 年 $month 月共有31天<br>";break; 	case 4: 	case 6: 	case 9: 	case 11: 		echo "$year 年 $month 月共有30天<br>";break; 	case 2: 		echo IsLeapYear($year)? "$year 年  $month 月共有29天<br>" : "$year 年  $month 月共有28天<br>";break; 	default:echo '输入错误,请输入1-12之间的数<br>';break; 	} }

调用GetMaxDay($year,$month)函数:

GetMaxDay(2000,2); GetMaxDay(2001,2); GetMaxDay(2001,3); GetMaxDay(2001,4);

我们来看看输出结果:

怎么通过PHP判断指定月份共有几天

可以看出,因为2000年是闰年,所以2月共有29天;2001年是平年,所以2月共有29天。而3月是大月,所以有31天;4月是小月,所以有30天。

好了就说到这里了,有其他想知道的,可以点击这个哦。→ →php视频教程

赞(0)
分享到: 更多 (0)