八、PHP日期和时间函数
获取日期和时间
在PHP中,要获取当前的日期和时间非常简单,只需使用date()函数即可。date()函数的语法格式如下:String date(string $format [,int $timestamp])
返回按照指定格式显示的时间字符串。其中参数format为显示格式,而参数timestamp为时间戳。如果没有给出时间戳则使用本地当前时间。timestamp为可选参数,默认值为time()。其中format的选项很多,具体设置如表所示。
<?php //设置PHP语言时区为Asia/Shanghai,这样读取的时间没有时间差 date_default_timezone_set("Asia/Shanghai"); // 输出类似:Monday echo date("l") . "<br>"; // 输出类似:Tuesday 22nd of January 2013 10:35:55 PM echo date('l dS \of F Y h:i:s A'). "<br>"; echo date('\i\t \i\s \t\h\e jS \d\a\y.'). "<br>"; echo date("F j, Y, g:i a"). "<br>"; echo date("m.d.y"). "<br>"; echo date("j,n,Y"). "<br>"; echo date('h-i-s, j-m-y'). "<br>"; echo date('Y年m月d日'). "<br>"; echo date("H:i:s"). "<br>"; //输出由年月日时分秒组合的字符串 echo date("YmdHis"). "<br>"; echo date("Y-m-d H:i:s"). "<br>"; ?>
在PHP语言中默认设置的是标准的格林威治时间(即采用的是零时区),该时间比系统时间少8个小时。所以要获取本地时间必须更改PHP语言中的时区设置,更改PHP时区设置的函数如下:date_default_timezone_set($timezone);
参数timezone为PHP可识别的时区名称,在PHP手册中提供了各种时区[1]名称列表,其中,设置我国北京时间可以使用的时区包括:PRC(中华人民共和国)、Asia/Chongqing(重庆)、Asia/Shanghai (上海)或者Asia/Urumqi (乌鲁木齐),这几个时区名称是等效的。使用getdate函数获得日期信息
getdate函数用于取得日期时间信息,语法格式如下:array getdate([int $timestamp])
返回一个根据timestamp得出的包含有日期信息的结合数组。如果没有给出时间戳则认为是当前本地时间。返回的数组元素如表所示。
<?php
date_default_timezone_set("Asia/Shanghai");
$arr_date = getdate();
echo $arr_date[year]."-".$arr_date[mon]."-".$arr_date[mday]." ";
echo $arr_date[hours].":".$arr_date[minutes].":".$arr_date[seconds]." ".$arr_date[weekday];
echo "<br>";
echo "Today is the $arr_date[yday]th of year";
?>
使用mktime函数取得一个日期的时间戳
PHP使用mktime()函数将一个时间转换成Unix的时间戳值。时间戳是一个长整数,包含了从Unix纪元(january 1 1970 00:00:00 GMT)到给定时间的秒数。该函数的语法格式如下:
int mktime ([ int $hour [, int $minute [, int $second [, int $month [, int $day [, int $year [, int $is_dst ]]]]]]] )
参数可以从右向左省略,任何省略的参数会被设置成本地日期和时间的当前值。参数说明如表所示。
mktime() 函数对于日期运算和验证非常有用。它可以自动校正越界的输入。例如:<?php echo date("M-d-Y",mktime(0,0,0,12,36,2011))."<br>"; echo date("M-d-Y",mktime(0,0,0,14,1,2011))."<br>"; echo date("M-d-Y",mktime(0,0,0,1,1,2011))."<br>"; echo date("M-d-Y",mktime(0,0,0,1,1,13))."<br>"; ?>
日期和时间的应用
- 比较两个时间的大小
在实际的开发中经常会对两个时间的大小进行判断,PHP中的时间是不可以直接进行比较的。所以需要将时间解析为时间戳的格式,然后再进行比较。在PHP中将时间解析为时间戳的函数是strtotime(),其语法格式为:int strtotime(string $time[,int $now])
该函数有两个参数。如果参数time的格式是绝对时间,则now参数不起作用;如果参数time的格式是相对时间,那么其对应的时间就是参数now来提供的;如果没有提供参数now,对应的时间为当前时间。成功则返回时间戳,否则返回 False。 实现倒计时功能
利用strtotime()函数除了可以比较两个日期的大小,还可以精确地计算出两个日期的差值。例如:<?PHP $time1 = strtotime(date("Y-m-d H:i:s")); $time2 = strtotime("2013-5-1 17:10:00"); $time3 = strtotime("2013-10-1"); $sub1 = ceil(($time2 - $time1) / 3600); //1小时等于60 * 60秒 $sub2 = ceil(($time3 - $time1) / 86400); //1天等于60 * 60 * 24秒 echo "离2013五一放假还有<font color=red> $sub1 </font>小时!!!" ; echo "<br>"; echo "离2013年国庆还有<font color=red>$sub2 </font>天!!!"; ?>
计算页面脚本的运行时间
要计算PHP程序的执行时间需要用到microtime()函数,该函数返回当前Unix时间戳和微秒数。返回格式为”msec sec”的字符串,中sec是自Unix纪元(january 1 1970 00:00:00 GMT)起到现在的秒数,msec是微秒部分。字符串的两部分都是以秒为单位返回的。函数语法格式如下:mixed microtime (void)
<?PHP $pagestartime=microtime(); $time1 = strtotime(date("Y-m-d H:i:s")); $time2 = strtotime("2013-5-1 17:10:00"); $time3 = strtotime("2013-10-1"); $sub1 = ceil(($time2 - $time1) / 3600); //60 * 60 $sub2 = ceil(($time3 - $time1) / 86400); //60 * 60 * 24 echo "离2013五一放假还有<font color=red> $sub1 </font>小时!!!" ; echo "<br>"; echo "离2013年国庆还有<font color=red>$sub2 </font>天!!!<br>"; $pageendtime = microtime(); $starttime = explode(" ",$pagestartime); $endtime = explode(" ",$pageendtime); $totaltime = $endtime[0]-$starttime[0]+$endtime[1]-$starttime[1]; $timecost = sprintf("%s",$totaltime); echo "页面运行时间: $timecost 秒"; ?>
- 比较两个时间的大小
九、PHP函数
内置函数
PHP中有许多使用频率很高的内置函数,下面分别介绍这些函数。- echo函数
该函数用于输出一个或者多个字符串,其语法格式如下:
void echo ( string $arg1 [, string $... ] )
严格来说echo()并不是一个函数,而是一个语言结构,因此不一定要使用小括号来指明数,单引号,双引号都可以。另外,如果你想给echo()传递多个参数,那么就不能使用小括号。以下为一个使用echo的例子代码。
<?php //输出字符串,字符串放在双引号和单引号都可以 echo "Hello World<br>"; echo 'How do you do<br>'; //可以在字符串中输出变量的值,但变量必须放在双引号字符串中 $foo = "football"; $bas = "basketball"; echo "foo is $foo<br>"; // foo is football echo 'foo is $foo<br>'; // foo is $foo //也可以用字符串连接符“.”连接变量输出 echo "bas is ".$bas."<br>"; // bas is basketball //可以用echo输出数组元素 $baz = array("key" => "volleyball"); echo "vol is {$baz['key']} !<br>"; // vol is volleyball ! ?>
- print函数
另外一个常用的输出函数名为print,其语法格式:int print ( string $arg )
严格来说print也不是一个函数,而是一个语法结构,因此输出的时候参数不需要括号。print语句的用法同echo类似. include和require函数
include函数在PHP网页设计中非常重要。它可以很好地实现代码的可重用性,同时还可以简化文件代码。include语句包含并运行指定文件,假如现在有文件a.php,在a.php中包含b.php文件,此时只需在a.php文件中使用“include ‘b.php’;”语句即可。当服务器执行a.php到这一行的时候,就会自动读取b.php文件中的代码并执行其中的代码。此方法非常有用,如在网页设计中,很多时候,大部分页头和页尾都是一样的。为了减少每个网页的代码重用,可以将页尾和页头分别做成header.php和footer.php页面。然后在页面中包含该页面,如下所示:
<?php include 'header.php'; //其他代码 include 'footer.php'; ?>
另外在PHP编程时也经常将一些常用的访问数据库函数写到一个文件中,然后用include函数将这个文件导入即可。
require()函数的用法和include()函数基本一样。这两种结构除了在如何处理失败之外完全一样。include()产生一个警告而require()则导致一个致命错误。换句话说,如果想在遇到丢失文件时停止处理页面就用require()。include()就不是这样,脚本会继续运行。
- echo函数
定义函数
- 定义和调用函数
函数,就是将一些重复使用到的功能写在一个独立的代码块中,在需要时单独调用。创建函数的基本语法格式为:
function fun_name($arg1,$arg2…$argn){ fun_body; }
其中,function为声明自定义函数时必须使用到的关键字;fun_name为自定义函数的名称;arg1,arg2…argn为函数的参数;fun_body为自定义函数的主体,是功能实现部分。
在函数间传递参数
在调用函数时,需要向函数传递参数,被传入的参数称为实参,而函数定义的参数为形参。参数传递的方式有按值传递、按引用传递和默认参数3种。 按值传递方式将实参的值复制到对应的形参中,在函数内部的操作针对形参进行,操作的结果不会影响到形参,即函数返回后,实参的值不会改变。
<?php function fun( $m ){ //定义一个函数 $m = $m * 8 + 10; echo "在函数内:\$m = ".$m; //输出形参的值 } $m = 1; fun( $m ) ; //传值:将$m的值传递给形参$m echo "<br>在函数外:\$m = $m" ; //实参的值没有发生变化,输出m=1 ?> 以上代码执行结果为: 在函数内:$m = 18 在函数外:$m = 1
按引用传递方式将实参的内存地址传递到形参中,在函数内部的所有操作都会影响到形参的值,即函数返回后,实参的值会发生变化。引用传递方式就是传值时在原基础上加上&号即可。
<?php function fun( &$m ){ //定义一个函数 $m = $m * 8 + 10; echo "在函数内:\$m = ".$m; //输出形参的值 } $m = 1; fun( $m ) ; //传值:将$m的内存地址传递给形参$m echo "<br>在函数外:\$m = $m" ; //实参的值发生了变化,输出$m=18 ?> 以上代码执行结果为: 在函数内:$m = 18 在函数外:$m = 18
还有一种设置参数的方式,即默认参数(可选参数)。可以指定某个参数为可选参数,将可选参数放在参数列表末尾,并且指定其默认值。例如:
<?php function fun($price,$tax="1"){ $price=$price+($price*$tax); echo "价格:$price<br>"; } fun(100,0.35); //为可选参数赋值0.35 fun(100); //没有给可选参数赋值时使用默认参数 ?> 以上代码执行结果为: 价格:135 价格:200
从函数中返回值
通常函数将返回值传递给调用者的方式是使用关键字return。return将函数的值返回给函数的调用者,即将程序控制权返回到调用者的作用域。如果在全局作用域内使用return关键字,那么将终止脚本的执行。例如:<?php function fun($price,$tax=0.35){ //定义一个函数,函数中的一个参数有默认值 $price=$price+($price*$tax); //计算金额 return $price; //返回金额 } echo fun(100); //调用函数 ?> 以上代码执行结果为:135
return只能返回一个值,不能一次返回多个。如果返回多个结果,就要在函数中定义一个数组,将返回值存储在数组中返回。
- 对函数的引用
引用不仅可以用于普通变量、普通参数,也可以作用于函数本身。对函数的引用,就是对函数返回结果的引用。例如:
<?php function &fun($temp_str=0){ //定义一个函数,别忘了加“&”符 return $temp_str; //返回参数$temp_str } $str = &fun("函数引用"); //声明一个函数的引用$str; echo $str."<br>"; ?> 以上代码执行结果为:函数引用
在上面代码中,首先定义一个函数,这里需在函数名前加“&”符号,接着变量$str将引用该函数,最后输出该变量$str,实际上就是$temp_str的值。
- 取消引用
当不再需要引用时,可以取消引用。取消引用使用unset()函数,它只是断开了变量名和变量内容之间的绑定,而不是销毁变量内容。例如:
<?php $str = "I like PHP"; //声明一个字符串变量 $math = &$str; //声明一个对变量$str的引用$math echo "\$math is: ".$math."<br>"; //输出引用$math unset($math); //取消引用$math echo "\$math is: ".$math."<br>"; //再次输出引用 echo "\$str is: ".$str; //输出原变量 ?>
- 定义和调用函数
变量函数
PHP 支持变量函数的概念。这意味着如果一个变量名后有圆括号,PHP将寻找与变量的值同名的函数,并且将尝试执行它。除了别的事情以外,这个可以被用于实现回调函数,函数表等等。变量函数不能用于语言结构,例如echo(),print(),unset(),isset(),empty(),include(),require()以及类似的语句。需要使用自己的外壳函数来将这些结构用作变量函数。 例如:<?php function comm() { //定义comm函数 echo "I like PHP<br>"; } function like($name = "jack") { //定义like函数 echo $name." like PHP<br>"; } function hate($name) //定义hate函数 { echo "$name hate PHP<br>"; } $func = "comm"; //声明一个变量,将变量赋值为“comm” $func(); //使用变量函数来调用函数comm() $func = "like"; //重新给变量赋值 $func("James"); //使用变量函数来调用函数like() $func = "hate"; //重新给变量赋值 $func("John"); //使用变量函数来调用函数hate(); ?>