10.2 PHP日期和时间函数

10.2 PHP日期和时间函数

视频讲解:光盘TMlx10PHP日期和时间函数.exe

PHP提供了大量的内置函数,使开发人员在日期和时间的处理上游刃有余,大大提高了工作效率。在本节中,将介绍一些常用的PHP日期和时间函数及实际应用的实例。

10.2.1 获得本地化时间戳

PHP应用mktime()函数将一个时间转换成UNIX的时间戳值。

mktime()函数根据给出的参数返回UNIX时间戳。时间戳是一个长整数,包含了从UNIX纪元(1970年1月1日)到给定时间的秒数。其参数可以从右向左省略,任何省略的参数会被设置成本地日期和时间的当前值。该函数的语法格式如下:

int mktime(int hour, int minute, int second, int month, int day, int year, int [is_dst] )

mktime()函数的参数说明如表10.1所示。

表10.1 mktime()函数的参数说明

注意

有效的时间戳典型范围是格林威治时间1901年12月13日20:45:54~2038年1月19日03:14:07 (此范围符合32位有符号整数的最小值和最大值)。在Windows系统中此范围限制为1970年1月1日~2038年1月19日。

【例10.1】本例使用mktime()函数获取指定的时间,由于返回的是时间戳,还要通过date()函数对其进行格式化,才能够输出日期和时间,实例代码如下:(实例位置:光盘TMsl101)

<?php echo"指定时间的时间戳:".mktime(12,23,56,12,10,2012)."<p>"; //输出指定时间的时间戳 echo "指定日期为:".date("Y-m-d", mktime(12,23,56,12,10,2012))."<p>"; //使用date()函数输出格式化后的日期 echo"指定时间为:".date("H:i:s", mktime(12,23,56,12,10,2012)); //使用date()函数输出格式化后的时间 ?>

运行结果如图10.1所示。

图10.1 使用mktime()函数获取指定的时间

10.2.2 获取当前时间戳

PHP通过time()函数获取当前的UNIX时间戳,返回值为从UNIX纪元(格林尼治时间1970年1月1日00:00:00)到当前时间的秒数。

语法格式如下:

int time (void)

【例10.2】本例中使用time()函数获取当前时间戳,并将时间戳格式化输出。实例代码如下:(实例位置:光盘TMsl102)

<?php $nextWeek=time()+(7*24*60*60); //7 days;24 hours;60 mins;60secs echo'Now: '. date('Y-m-d')."<p>"; //输出当前日期 echo'Next Week: '. date('Y-m-d', $nextWeek); //输出变量NextWeek的日期 ?>

运行结果如图10.2所示。

图10.2 使用time()函数获取当前时间戳

10.2.3 获取当前日期和时间

在PHP中通过date()函数获取当前的日期和时间。date()函数的语法如下:

date(string format, int timestamp)

date()函数将返回参数timestamp按照指定格式而产生的字符串。其中的参数timestamp是可选的,如果省略,则使用当前时间。format参数可以使开发人员按其指定的格式输出日期时间,关于format参数的格式化选项将在10.2.6节进行介绍,这里给出几个预定义常量,如表10.2所示,这几个常量提供了标准的日期表达方法,可用于日期格式函数。

表10.2 关于时间日期的预定义常量

【例10.3】本例将比较各个常量的输出有什么区别。实例代码如下:(实例位置:光盘TMsl103)

<?php echo"DATE_ATOM=".date(DATE_ATOM); //输出ATOM格式的日期 echo"<p>DATE_COOKIE=".date(DATE_COOKIE); //输出HTTP Cookie格式的日期 echo"<p>DATE_ISO8601=".date(DATE_ISO8601); //输出ISO8601格式的日期 echo"<p>DATE_RFC822=".date(DATE_RFC822); //输出RFC822格式的日期 echo"<p>DATE_RFC850=".date(DATE_RFC850); //输出RFC850格式的日期 echo"<p>DATE_RSS=".date(DATE_RSS); //输出RSS格式的日期 echo"<p>DATE_W3C=".date(DATE_W3C); //输出W3C格式的日期 ?>

运行结果如图10.3所示。

图10.3 预定义常量

注意

也许有的读者得到的时间和系统时间并不相同,这是因为在PHP语言中默认设置的是标准的格林威治时间,而不是北京时间。如果出现了时间不符的情况,可参考10.1节的系统时区设置。

10.2.4 获取日期信息

日期是数据处理中经常使用到的信息之一。本节主要应用getdate()函数获取日期指定部分的相关信息。getdate()函数的语法如下:

array getdate(int timestamp)

getdate()函数返回数组形式的日期和时间信息,如果没有时间戳,则以当前时间为准。该函数返回的关联数组元素的说明如表10.3所示。

表10.3 getdate()函数返回的关联数组元素说明

【例10.4】下面使用getdate()函数获取系统当前的日期信息,并输出该函数的返回值,实例代码如下:(实例位置:光盘TMsl104)

<?php $arr=getdate(); //使用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"; //输出今天是一年中的第几天 ?>

运行结果如图10.4所示。

图10.4 getdate()函数获取时间日期信息

10.2.5 检验日期的有效性

一年有12个月,一个月有31天(或30天,2月有28天,闰年为29天),一星期有7天……这些常识人人皆知。但计算机并不能自己分辨数据的对与错,只是依靠开发者提供的功能去执行或检查。PHP中内置了日期检查函数,就是checkdate()函数。checkdate()函数的语法如下:

bool checkdate(int month, int day, int year)

其中,month的有效值为1~12; day的有效值为当月的最大天数,如1月为31天,2月为29天(闰年); year的有效值为1~32767。

【例10.5】本例将观察使用checkdate()函数的返回值,一个为正确的日期,一个为错误的日期,实例代码如下:(实例位置:光盘TMsl105)

<?php $year=2008; //年份 $month=2; //月份 $day1=29; //每月份的第几天 $day2=30; //每月份的天数 var_dump(checkdate($month, $day1, $year)); //查看第一种情况的返回结果 var_dump(checkdate($month, $day2, $year)); //查看第二种情况的返回结果 ?>

运行结果如图10.5所示。

图10.5 使用checkdate()函数验证日期

10.2.6 输出格式化的日期和时间

格式化时间函数date()的语法在10.2.3节中已经讲解过,这里重点讲解date()函数的参数format的格式化选项,如表10.4所示。

表10.4 参数format的格式化选项

【例10.6】 date()函数可以对format选项随意地组合。在本例中,既有单独输出一个参数的情况,也有输出多个参数的情况,最后还输出了转义字符。实例代码如下:(实例位置:光盘TMsl106)

<?php 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("Todayisthe jSofyea"); //输出转义字符 ?>

运行结果如图10.6所示。

图10.6 输出格式化的时间日期

10.2.7 显示本地化的日期和时间

不同的国家和地区,使用不同的时间、日期、货币的表示法和不同的字符集。如例10.4中的星期,在大多数西方国家都使用Friday,但在以汉语为主的国家中都使用星期五,虽然都是同一个含义,但表示的方式却不尽相同,这时就需要设置本地化环境。这里将使用setlocale()函数和strftime()函数来设置本地化环境和格式化输出日期和时间。下面分别对这两个函数进行介绍。

1.setlocale()函数

setlocale()函数可以改变PHP默认的本地化环境。

语法格式如下:

string setlocale(string category, string locale)

参数category的选项如表10.5所示。

表10.5 category参数选项及说明

参数locale如果为空,就会使用系统环境变量的locale或lang的值,否则就会应用locale参数所指定的本地化环境。如en_US为美国本地化环境,chs则指简体中文,cht为繁体中文。

说明

对于Windows平台的用户,可以登录http://msdn.microsoft.com来获取语言和国家(地区)的编码列表。如果是UNIX/Linux系统,则可以使用命令locale-a来确定所支持的本地化环境。

2.strftime()函数

strftime()函数根据本地化环境设置来格式化输出日期和时间。

语法格式如下:

string strftime(string format, int timestamp)

该函数返回用给定的字符串对参数timestamp进行格式化后输出的字符串。如果没有给出时间戳,则用本地时间。月份、星期以及其他和语言有关的字符串写法和setlocale()函数设置的当前区域有关。format参数识别的转换标记如表10.6所示。

表10.6 参数format识别的转换标记

说明

对于strftime()函数,可能不是所有的转换标记都被C库文件支持,这种情况下PHP的strftime()也不支持。此外,不是所有的平台都支持负的时间戳,因此日期的范围可能限定在不早于UNIX纪元。这意味着,%e, %T, %R和%D(可能更多)以及早于Jan 1, 1970的时间在Windows、Linux以及其他几个操作系统中无效。对于Windows系统,所支持的转换标记可在MSDN网站找到。

【例10.7】本例分别使用en_US、chs和cht来输出今天是星期几,实例代码如下:(实例位置:光盘TMsl107)

<?php 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.7所示。

图10.7 本地化日期

说明

因为本页面中的编码格式为GB2312,所以最后繁体中文显示的日期为乱码,如果将编码格式改为big5,繁体中文将显示出来,但其他文字则变为乱码。可以选择“查看”/“编码”命令,在弹出的菜单中选择“繁体中文(big5)”选项查看效果。

注意

如果在系统中没有安装各自的区域设置,是无法工作的。

10.2.8 将日期和时间解析为UNIX时间戳

PHP中应用strtotime()函数可将任何英文文本的日期和时间解析为UNIX时间戳,其值相对于now参数给出的时间,如果没有提供此参数则用系统当前时间。

strtotime()函数的语法如下:

int strtotime (string time [, int now] )

该函数有两个参数。如果参数time的格式是绝对时间,则now参数不起作用;如果参数time的格式是相对时间,那么其对应的时间就是参数now来提供的,如果没有提供参数now,对应的时间就为当前时间。如果解析失败,则返回false。在PHP 5.1.0之前,本函数在失败时返回-1。

【例10.8】本例应用strtotime()函数获取英文格式日期时间字符串的UNIX时间戳,并将部分时间输出。实例代码如下:(实例位置:光盘TMsl108)

<?php echo strtotime("now"), "n"; //当前时间的时间戳 echo"输出时间:".date("Y-m-d H:i:s", strtotime("now")), "<br>"; //输出当前时间 echo strtotime("21 May 2009"), "n"; //输出指定日期的时间戳 echo"输出时间:".date("Y-m-d H:i:s", strtotime("21 May 2009")), "<br>"; //输出指定日期的时间 echo strtotime ("+3 day"), "n"; echo "输出时间:".date("Y-m-d", strtotime ("+3 day")), "<br>"; echo strtotime ("+1 week")."<br>"; echo strtotime ("+1 week 2 days 3 hours 4 seconds")."<br>"; echo strtotime ("next Thursday")."<br>"; echo strtotime ("last Monday"), "n"; ?>

运行结果如图10.8所示。

图10.8 使用strtotime()函数将日期和时间解析为UNIX时间戳

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

微信扫一扫

微信扫一扫

微信扫一扫,分享到朋友圈

10.2 PHP日期和时间函数