int mktime([int hour [,int minute[,int second[,int month[,int day[int year]]]]]])
<?php echo date("Y-m-d",mktime(0,0,0,12,36,2008))."\n"; //日期超过31天,计算后输出 2009-01-05 echo date("Y-m-d",mktime(0,0,0,14,1,2010))."\n"; //月份超过12月,计算后输出2011-02-01 echo date("Y-m-d",mktime(0,0,0,1,1,2012))."\n"; //没有问题的转变,输出结果2012-01-01 echo date("Y-m-d",mktime(0,0,0,1,1,99))."\n"; //会将99年转变为1999年, 1990-01-01 ?>
如果有需要将任何英文文本的日期时间描述直接解析为UNIX时间戳,可以使用strtotime()函数,该函数的圆形如下所示:
int strtotime(string time[,int now])
函数strtotime()可以用英语的自然语言创建讴歌时刻的时间戳,接受一个包含美国英语日期格式的字符串并尝试将其解析为UNIX时间戳(自January 1 1970 00:00:00 GMT起的描述),其值相对于now参数给出的时间,如果没有提供次参数则用系统当前时间。该函数执行成功则返回时间戳,否则返回FALSE。和mktime()的对比如下所示:
<?php echo date("Y-m-d", strtotime("now")); //输出现在的时间戳 echo date("Y-m-d", strtotime("8 may 2012")); //输出2012-05-08 echo date("Y-m-d", strtotime("+1 day")); //输出现在的日期加1天 echo date("Y-m-d", strtotime("last monday")); //输出2012-04-02 ?>
下例通过使用strtotime()函数编写一个纪念日的倒计时程序,来介绍一下该函数在项目开发中的实际应用,示例代码如下所示:
<?php $now =strtotime("now"); //当前时间 $endtime= strtotime("2014-08-18 08:08:08"); //设定毕业时间,转成时间戳 $second = $endtime-$now; //获取毕业时间到现在时间的时间戳(秒数) $year = floor($second/3600/24/365); //从这个时间戳中换算出年头数 $temp =$second-$year*365*24*3600; //从这个时间戳中去掉整年的秒数,就剩下月份的秒数 $month=floor($temp/3600/24/30); //从这个时间戳中共换算出月数 $temp=$temp-$month*30*3600*24; //从时间戳中去掉整月的秒数,就剩下天的描述 $day = floor($temp/24/3600); //从这个时间戳中换算出剩余的天数 $temp=$temp-$day*3600*24; //从这个时间戳中去掉整天的秒数,就剩下小时的秒数 $hour = floor($temp/3600); //从这个时间戳中换算出剩余的小时数 $temp=$temp- $hour*3600; //从时间戳中去掉小时的秒数,就剩下分的秒数 $minute=floor($temp/60); //从这个时间戳中换算出剩余的分数 $second1=$temp-$minute*60; //最后只有剩余的秒数了 echo "距离培训毕业还有($year)年($month)月($day)天($hour)小时($minute)分($second1)秒。"; ?>
注意:如果给定的年份是两位数字的格式,则其值0-69表示2000-2069,70-100表示1970-2000。
日期的计算
在PHP中,计算两个日期之间相隔的长度,最简单的方法就是通过计算两个UNIX时间戳之差来获得。例如,在PHP脚本中接收来自HTML表单用户提交的出生日期,计算这个用户的年龄。如下所示:
<?php //从表单中接收用户提交的出生日期中的年份、月份、天 $year = 1981; $month = 11; $day = 05; $birthday = mktime(0,0,0,$month,$day,$year); //将出生日期转变为UNIX时间戳 $nowdate = time(); //调用time()函数获取当前时间的UNIX时间戳 $ageunix = $nowdate -$birthday; //两个时间戳相减获取用户年龄的UNIX时间戳 $age = floor($ageunix/3600/24/365); //将UNIX时间戳除以一年的秒数获取用户的年龄 echo "年龄:$age"; ?>
在以上的脚本中,调用mktime()函数将从用户出生日期转变为UNIX时间戳,再调用time()函数获取当前时间的UNIX时间戳。因为这个日期的格式都是使用整数表示的,所以可以将他们相减。又将计算后获取的UNIX时间戳除以一年的秒数,将UNIX时间戳转变为以年度量的单位。