`
tw5566
  • 浏览: 460757 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

php 日期和时间 (转)

    博客分类:
  • php
 
阅读更多

PHP提供了大量的内置函数,使开发人员在时间的处理上游刃有余,大大提高了工作效率。我们今天就为学员介绍一些常见的PHP日期和时间函数以及日期和时间的处理。

9.1 常用的日期和时间处理函数
表9-1:常用的日期和时间处理函数

函 数
 说  明
 
checkdate
 验证时间函数,判断时间是否有效,有效返回true,否则返回false
 
date_default_timezone_get
 取得脚本日期时间函数所使用的默认时区
 
date_default_timezone_set
 设定日期时间函数的默认时区
 
date
 格式化一个本地时间/日期
 
getdate
 获取日期/时间信息
 
gettimeofday
 获取当前时间
 
localtime
 获取本地时间
 
microtime
 返回当前时间戳和微秒数
 
mktime
 取得一个UNIX时间戳
 
strtotime
 将任何英文文本的日期时间描述解析为UNIX时间戳
 
time
 返回当前的UNIX时间戳
 

9.2 处理日期和时间
9.2.1 获取当前日期和时间:date()函数,用法:
date(string format,int timestamp)
 


该函数将返回参数timestamp按照指定格式而产生的字符串。其中参数timestamp是可选的,如果省略,则使用当前时间。format参数可以使开发人员按其指定的格式输出时间日期。

date_default_timezone_set(PRC);  //设置北京时间.

1. 年-月-日

echo date('Y-m-j');  //例:2007-02-6

echo date('y-n-j');  //例:07-2-6
 


大写Y表示年四位数字,而小写y表示年的两位数字;

小写m表示月份的数字(带前导),而小写n则表示不带前导的月份数字。

echo date('Y-M-j');   //例:2007-Feb-6

echo date('Y-m-d');   //例:2007-02-06
 


大写M表示月份的3个缩写字符,而小写m则表示月份的数字(带前导0);

没有大写的J,只有小写j表示月份的日期,无前导o;若需要月份带前导则使用小写d。

echo date('Y-M-j');   //例:2007-Feb-6

echo date('Y-F-jS');  //例:2007-February-6
 


大写M表示月份的3个缩写字符,而大写F表示月份的英文全写。(没有小写f)

大写S表示日期的后缀,比如“st”、“nd”、“rd”和“th”,具体看日期数字为何。

小结:

表示年可以用大写的Y和小写y;

表示月可以用大写F、大写M、小写m和小写n(分别表示字符和数字的两种方式);

表示日可以用小写d和小写j,大写S表示日期的后缀。

2,时:分:秒

默认情况下,PHP解释显示的时间为“格林威治标准时间”,与我们本地的时间相差8个小时。

echo date('g:i:s a');    //例:5:56:57 am

echo date('h:i:s A');    //例:05:56:57 AM
 


小写g表示12小时制,无前导0,而小写h则表示有前导0的12小时制。

当使用12小时制时需要表明上下午,小写a表示小写的“am”和“pm”,大写A表示大写的“AM”和“PM”。

echo date('G:i:s');14:02:26
 


大写G表示24小时制的小时数,但是不带前导的;使用大写的H表示带前导的24小时制小时数

小结:

字母g表示小时不带前导,字母h表示小时带前导;

小写g、h表示12小时制,大写G、H表示24小时制。

3,闰年、星期、天


大写L表示判断今年是否闰年,布尔值,为真返回1,否则为0;

小写l表示当天是星期几的英文全写(Tuesday);

而使用大写D表示星期几的3个字符缩写(Tue)。

echo date('w');    //例:今天星期:2

echo date('W');    //例:本周是全年中的第 06 周
 


小写w表示星期几,数字形式表示

大写W表示一年中的星期数

echo date('t');    //例:本月是 28 天

echo date('z');    //例:今天是今年的第 36 天
 


小写t表示当前月份又多少天

小写z表示今天是本年中第几天

4,其他

echo date('T');    //例:UTC
 


大写T表示服务器的时间区域设置

echo date('I');    //例:0
 


大写I表示判断当前是否为夏令时,为真返回1,否则为0

echo date('U');    //例:1170769424
 


大写U表示从1970年1月1日到现在的总秒数,就是Unix时间纪元的UNIX时间戳。

echo date('c');    //例:2007-02-06T14:24:43+00:00
 


小写c表示ISO8601日期,日期格式为YYYY-MM-DD,用字母T来间隔日期和时间,时间格式为HH:MM:SS,时区使用格林威治标准时间(GMT)的偏差来表示。

echo date('r');    //例:Tue, 06 Feb 2007 14:25:52 +0000
 


小写r表示RFC822日期。

9.2.2 获取日期信息:getdate()函数
语法:

    array getdate(int timestamp)
 


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

表9-2:getdate()函数返回的关联数组元素说明

元  素
 说  明
 
seconds
 秒,返回值0~59
 
minutes
 分钟,返回值为0~59
 
hours
 小时,返回值为0~23
 
mday
 月份中第几天,返回值为1~31
 
wday
 星期中第几天,返回值为0(星期天)~6(星期六)
 
mon
 月份数字,返回值为1~12
 
year
 4位数字表示的完整年份,返回值加2000或2008
 
yday
 一年中第几天,返回值0~365
 
weekday
 星期几的完整文本表示,返回值为Sunday~Saturday
 
month
 月份的完整文本表示,返回值为January~December
 
0
 返回从UNIX纪元开始的秒数
 

例:

<?php

    $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";

?>
 


效果:


9.3  UNIX时间戳
时间戳是文件属性中的创建、修改、访问时间。数字时间戳服务(digital time stamp service, DTS)是web网站安全服务项目之一,能提供电子文件的日期和时间信息的安全保护。

9.3.1  什么是时间戳
时间戳是一个经加密后形成后的凭证文档,它包括3个部分:

²  需要添加时间戳的文件用Hash编码加密形成摘要。

²  DTS接受文件的日期和时间信息。

²  对接受的DTS文件加密。

数字时间是由认证单位DTS来添加的,以DTS接收到文件的时间为依据。

时间戳的作用原理是通过其他加密法将时间的数值转换为加密的数值,时间变化后加密的数值也随之变化。

时间戳的优点是:变化的加密数值来防止数值被窃取后非法重复利用,也就起到了加密的作用。时间戳主要依赖于时间,在约定的一段时间内产生唯一的一个数值。

9.3.2 获取本地时间戳:mktime()函数
语法:

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


表9-3:mktime()函数的参数说明

参  数
 说  明
 
hour
 小时数
 
minute
 分钟数
 
second
 秒数(一分钟之内)
 
month
 月份数
 
day
 天数
 
year
 年份数
 
is_dst
 参数is_dst在夏令时可以被设置为1,如果不是则设置为0;如果不确定是否为夏令时则设置为-1(默认值)
 

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

例:

<?php

    echo "mktime函数返回的时间戳:".mktime()."<p>";

    echo "当前的日期为:".date("Y-m-d",mktime())."<p>";

    echo "当前的时间是:".date("H:i:s",mktime());

?>
 


效果:


9.4  系统时区设置
很多学员在学习过程中发现通过date()函数获取到的时间跟本地时间不一样,这是由于PHP5对date()函数进行了重写,因此,目前的日期时间函数比系统时间少8个小时。在PHP语言中默认设置的是标准的格林威治时间(即采用的是零时区)。

更改PHP语言中的时区设置主要有以下两种方法:

1. 修改php.ini文件中的设置,找到[date]下的;date.timezone = 选项,将该项修改为date.timezone=Asia/Hong_Kong,然后重新启动apache服务器。

2. 在应用程序中,使用时间日期函数之前添加如下函数:

date_default_timezone_set(“Asia/Hong_Kong”);
 


设置完成后,date()函数就可以正常使用了,不会再出现时差问题。

9.5  时间开发中遇到的日期和时间问题
9.5.1 比较两个时间的大小
在实际开发中经常遇到判断两个时间的大小,PHP中的时间是不可以直接来进行比较的。所以,首先要将时间输出为时间戳的格式,然后再进行比较,这是常用到的方法。

有两个函数都可以实现这个功能,这里使用strtotime()函数,该函数可以将任何英文文本的日期时间描述解析为UNIX时间戳。该函数的语法为:

int strtotime(string time, int now)
 


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

例:

<?php

    $time1 = date("Y-m-d H:i:s");   //获取当前时间

    $time2 = "2008-2-3 16:30:00";   //给变量$time2设置一个时间

    echo "变量/$time1的时间为:".$time1."<br>";    //输出两个时间变量

    echo "变量/$time2的时间为:".$time2."<br>";

    if (strtotime($time1)-strtotime($time2)<0) {     //对两个时间进行比较

        echo "/$time1早于/$time2";   //如果time1-time2<0说明time1的时间在前

    }else{

        echo "/$time2早于/$time1";   //否则,说明time2的时间在前

    }

?>
 


效果:


9.5.2  计算两个日期的差值
    strtotime()函数除了可以比较两个日期的大小,还可以精确地知道两个日期的差值。下面通过一个倒计时的小程序来为学员们讲解如何用strtotime()函数来计算两个日期的差值。

<?PHP 

     $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);          //60 * 60

     $sub2 = ceil(($time3 - $time1) / 86400);         //60 * 60 * 24

     echo "离放假还有<font color=red> $sub1 </font>小时!!!" ;  

     echo "<p>";

     echo "离北京奥运开幕还有<font color=red>$sub2 </font>天!!!";

?>
 


效果:


9.5.3 计算页面脚本的运行时间
    在浏览网站时,经常会用到搜索引擎,在搜索信息时,细心的用户会发现,在搜索结果的最下方,一般都有“搜索时间为……秒”的字样。

这里使用到了microtime()函数,该函数返回当前UNIX时间戳和微秒数。返回格式为msec sec的字符串,其中sec是当前的UNIX时间戳,msec为微秒数。该函数的格式为:

string microtime(void)
 


    下面我们来计算一下上例的运行时间,代码如下:

<?php

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);          //60 * 60

     $sub2 = ceil(($time3 - $time1) / 86400);         //60 * 60 * 24

     echo "离放假还有<font color=red> $sub1 </font>小时!!!" ;  

     echo "<p>";

     echo "离北京奥运开幕还有<font color=red>$sub2 </font>天!!!";

     $end_time = run_time();

?> 

<p>

该示例的运行时间为<font color=blue> <?php echo ($end_time - $start_time); ?> </font>秒
 
 
分享到:
评论

相关推荐

    PHP 时间戳和日期时间转换

    在PHP编程中,时间戳和日期时间的转换是常见的操作,尤其在处理用户交互、存储数据或进行时间相关的计算时。本文将深入探讨这个主题,包括时间戳的概念、PHP中的日期时间函数以及如何在两者之间进行转换。 首先,...

    PHP中几个常用的日期及时间格式转换及比较函数

    在PHP编程语言中,处理日期和时间是常见且重要的任务之一。本文将深入探讨几个常用的日期及时间格式转换和比较函数,这些函数在日常开发中非常实用,可以帮助开发者更高效地管理和操作时间数据。 ### 1. date() 和 ...

    php10位时间戳转java日期

    php10位时间戳转java日期 /** * 转换10位时间戳工具,返回String的“yyyy-MM-dd”时间 * @param datetime int型10位时间戳 */ public static String formatDate(int datetime){ SimpleDateFormat sdf = ...

    PHP经典实例--日期和时间

    通过学习这些PHP日期和时间的实例,开发者不仅可以了解如何在代码中获取和格式化日期时间,还能掌握如何处理时间差、周期性任务以及与文件系统的交互。这些知识对于提升PHP编程能力,解决实际问题至关重要。

    php和smarty中格式化输出日期和时间的比较

    另一个强大的PHP日期时间处理工具是DateTime类,它提供了更丰富的功能,如时区处理、日期时间操作等。例如: ```php $datetime = new DateTime(); echo $datetime-&gt;format('Y-m-d H:i:s'); ``` 接下来,Smarty是一...

    ExpressiveDate一个PHP日期时间类流畅的扩展

    ExpressiveDate是一个专门为PHP设计的日期时间类扩展,它的出现是为了提供更加流畅和方便的方式来处理日期和时间。在PHP的内置DateTime类的基础上,ExpressiveDate增强了功能并优化了API,使得开发者可以更高效地...

    mysql 日期与时间的转换

    这条语句首先使用`STR_TO_DATE()`将字符串转换为日期时间格式,然后使用`UNIX_TIMESTAMP()`将其转换为Unix时间戳。 #### 4. 跨平台的时间戳转换 除了MySQL中的时间戳转换外,其他编程语言也提供了相应的工具来处理...

    php html日期控件.rar

    考虑到用户可能在不同的时区,使用`date_default_timezone_set()`函数设置服务器默认时区,确保日期时间处理的一致性。 7. 表单验证和错误消息: 在前端,可以使用HTML5的`required`属性确保日期字段非空,还可以...

    使用PHP的日期与时间函数技巧

    结合这些日期时间函数,可以进行各种时间计算和格式化工作,这对于处理跨时区的web应用尤为重要。例如,要显示系统当前的日期和时间,并且格式化为常见的“年-月-日 时:分:秒”的格式,可以直接使用date()函数,并...

    php选择日期

    1. **日期时间类(DateTime)** PHP 5.2.0 引入了DateTime类,提供了一种更强大、更灵活的方式来处理日期和时间。你可以通过实例化DateTime对象来创建一个日期或时间,然后使用其方法进行操作: ```php $date = new...

    PHP常用的日期操作

    在PHP编程语言中,日期和时间操作是相当常见的任务,特别是在构建动态网站和处理日志记录等场景。本文将深入探讨PHP中与日期相关的常用函数和操作,以便开发者能够更好地理解和利用这些工具。 PHP提供了丰富的内置...

    PHP日期和时间函数.ppt

    PHP的日期写法,时间函数的使用

    php分割日期段 split_time

    php实现通过两个日期如"2018-5-1"、"2018-6-1",输出两个日期段的每一天的日期,2018-5-1,2018-5-2————2018-6-1

    PHP动态网站开发任务-日期时间.pptx

    总的来说,PHP的date()和strtotime()函数为动态网站开发提供了强大的日期时间处理能力。它们可以方便地获取、格式化和操作日期时间,从而实现如用户登录记录、事件提醒、数据统计等功能。在实际编程中,理解并熟练...

    mysql 日期和时间格式转换实现语句

    这里是一个使用日期函数的例子。下面的查询选择了所有记录,其date_col的值是在最后30天以内: mysql&gt; SELECT something FROM table WHERE TO_DAYS(NOW()) – TO_DAYS(date_col) &lt;= 30; DAYOFWEEK(date) 返回日期...

    Carbon一个简单的日期时间API扩展

    总的来说,Carbon是PHP开发中处理日期和时间的强大工具,特别是在日志处理场景下,它的易用性和功能丰富性使得开发者能够更专注于业务逻辑,而不是基础的日期时间操作。通过利用Carbon提供的API,可以大大提高代码的...

    MySQL UNIX时间戳与日期的相互转换

    在MySQL中,可以通过`FROM_UNIXTIME()`和`UNIX_TIMESTAMP()`这两个函数来实现UNIX时间戳与日期之间的相互转换。 #### 二、UNIX时间戳转日期:`FROM_UNIXTIME()` ##### 1. 函数定义 `FROM_UNIXTIME()`是MySQL中的一...

    PHP+Mysql日期时间如何转换(UNIX时间戳和格式化日期)

    在IT行业中,尤其是在Web开发领域,PHP和MySQL是常见的编程语言和数据库系统,它们在处理日期和时间数据时,经常需要将日期时间转换为UNIX时间戳或者从UNIX时间戳转换回日期时间。UNIX时间戳是从1970年1月1日(UTC/...

Global site tag (gtag.js) - Google Analytics