

常用日期函数,date(),getdate(),checkdate(),setlocal(),strftime(),mktime(),strtotime(),microtime(),设置PHP默认时区
10.1 日期和时间的概述,常用的一些日期函数简介
date //格式化一个本地时间/日期
getdate //获取日期/时间信息
checkdate //判断时间是否有效,有效返回true,否则返回false
data_default_timezone_get/set //获取/设置日期时间函数的默认时区
gettimeofday //获取当前时间
localtime //获得本地时间
microtime //返回当前时间戳和微秒数
mktime //取得一个日期的unix时间戳
strtotime //将任何英文文本的日期时间转为unix时间戳
time //返回当前的unix时间戳
10.2 处理日期和时间
1) 获取当前日期和时间, 语法:date(string format,int timestamp)
//format是用来指定输出的时间日期的格式,timestamp可选参数设置指定格式产生的字串
例:使用预定义常量输出不同格式的时间和日期
echo "DATE_ATOM= ".date(DATE_ATOM);
echo "<p>DATE_COOKIE = ".date(DATE_COOKIE);
echo "<p>DATE_ISO8601 = ".date(DATE_ISO8601);
echo "<p>DATE_RFC822 = ".date(DATE_RFC822);
echo "<p>DATE_RFC850 = ".date(DATE_RFC850);
echo "<p>DATE_RSS = ".date(DATE_RSS);
echo "<p>DATE_W3C = ".date(DATE_W3C);
2) 获取日期信息,用以返回日期时间中的某部分,
如:seconds,minutes,hours,mday,wday,mon,year,yday,weekday,month,0
语法:array getdate(int timestamp)
例:
$arr = getdate();
echo $arr[year]."-".$arr[mon]."-".$arr[mday]." "; //输出年,月,日
echo $arr[hours].":".$arr[minutes].":".$arr[seconds]." ".$arr[weekday]; //输出小时,分钟,秒,星期几
echo "<p>";
echo "Today is the $arr[yday]th of year"; //一年中的多少天
3) 检验日期的有效性,语法:bool checkdate(int month,int day,int year)
//month值为1-12,day值为当月最大天数,year有效值1-32767
$year = 2008;
$month = 2;
$day1 = 29;
$day2 = 30;
var_dump(checkdate($month,$day1,$year));
echo "<br>";
var_dump(checkdate($month,$day2,$year));
4) 输出格式化的日期和时间date(),语法请见1),这里讲其参数format
echo "输出单个变量:".date("Y")."-".date("m")."-".date("d");
echo "<p>";
echo "输出组合变量:".date("Y-m-d");
echo "<p>";
echo "输出更详细的日期及时间".date("Y-m-d H:i:s");
echo "<p>";
echo "还可以更详细吗??";
echo date("l Y-m-d H:i:s T");
echo "<p>";
echo "输出转移字符:";
echo date("\T\o\d\a\y \i\s \\t\h\e jS \o\f \y\e\a\\r");
5) 显示本地化的日期和时间,不同国家有不同的时间,日期,货币表示方法和不同字符集
setlocale()和strftime()函数设置本地环境和格式化输出时间和日期
setlocale(LC_ALL,"en_US");
echo "美国格式:".strftime("Today is %A");
echo "<p>";
setlocale(LC_ALL,"chs");
echo "中文简体格式:".strftime("今天是%A");
echo "<p>";
setlocale(LC_ALL,"cht");
echo "<p>";
echo "繁体中文格式: ".strftime("今天是%A");
10.3 Unix时间戳
1) 时间戳是指文件属性里的创建,修改,访问时间
2) 数字时间戳服务(digital time stamp service,DTS),是web网站安全服务之一,能提供电子文件的日期和时间信息的安全保护
主要用于安全保护,加密,比如付费转款服务等需要高安全的
3) PHP使用mktime()函数将一个时间转换成unix时间戳。返回的结果是一个长整数,包括从Unix纪元年到当前时间的秒数
语法:int mktime(int hour, int minute, int second, int month, int day, int year, int [is_dst]) //参数可从右到左省略
echo "mktime函数返回的时间戳:".mktime()."<p>";
echo "当前的日期为:".date("Y-m-d",mktime())."<p>";
echo "当前的时间为:".date("H:i:s",mktime());
10.4 系统时区设置,修改php的时区为中国时区
1) php5.0对date()函数重写,默认采用零时区是标准的格林威冶时间,比系统当前时间少8小时
修改方法:
方法一:打开php.ini文件,找到[date]下的”;date.timezone=“改为"date.timezone=Asia/Hong_Kong"后重启apache服务
方法二:也可以在时间日期函数前加如下函数,如:date_default_timezone_set("Asia/Hong_Kong");
echo "mktime函数返回的时间戳:".mktime()."<p>";
echo "当前的日期为:".date("Y-m-d",mktime())."<p>";
echo "当前的时间为:".date("H:i:s".mktime());
10.5 开发中遇到的日期和时间问题
1) PHP中要先将时间转为时间戳格式才能比较大小,使用strtotime()函数
语法:int strtotime(string time, int now)
//如time为绝对时间不要now参数,如是相对时间又没提供now参数,就解析失败返回-1
//比较结果是,值小的时间更早
$time1 = date("Y-m-d H:i:s");
$time2 = "2008-2-3 16:30:00";
echo "变量\$time1的时间为:".$time1."<br>";
echo "变量\$time2的时间为:".$time2."<p>";
if(strtotime($time1) - strtotime($time2) < 0){
echo "\$time1 早于 \$time2 ";
}else{
echo "\$time2 早于 \$time1 ";
}
2) 计算两个时间的差值,倒计时的例子
$time1 = strtotime(date("Y-m-d H:i:s"));
$time3 = strtotime("2008-8-8");
$sub2 = ceil (($time3-$time1) / 86400);
echo "离北京奥运开幕还有<font color=red>$sub2 </font>天!!!";
3) 计算页面脚本运行时间,如:搜索时间...秒,使用microtime()函数
语法:string microtime(void) //返回unix时间戳和微秒数,返回格式为“msec sec",msec为微秒数,sec为时间戳
function run_time()
{
list($msec, $sec) = explode(" ",,microtime());
return ((float)$msec + (float)$sec);
}
$start_time = run_time();
$time1 = strtotime(date( "Y-m-d H:i:s"));
$time2 = strtotime("2008-2-3 17:10:00");
$time3 = strtotime("2008-8-8");
$sub1 = ceil(($time2 - $time1) / 3600);
$sub2 = ceil(($time3 - $time1) / 86400);
echo "离放假还有<font color=red>$sub2 </font>天!!!";
echo "<p>";
echo "离北京奥运开幕还有<font color=red>$sub2 </font>天!!!";
$end_time = run_time();
调用:<?php echo ($end_time - $start_time);?>