用户名:  密码:   
您当前的位置:首页 > 网页设计 >  PHP > 

第10讲 常用日期函数,date(),getdate(),checkdate(),setlocal(),strftime(),mktime(),strtotime(),microtime(),设置PHP默认时区

上次修改时间: 2016-01-29 15:48:02      来源:网络总结      作者:钢铁长陈
上一页      路径:DSD\Learn\PHP相关\PHP入门到精通笔记\      下一页

常用日期函数,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);?>