PHP基础之时间和日期

来源:互联网 发布:手机淘宝活动报名 编辑:程序博客网 时间:2024/06/06 10:47

在php中,日期和时间函数依赖于服务器的时间设置,服务器的默认时间是格林尼治时间(零时区时间)。如果不进行时间设置,那么通过php取到的时间就是格林尼治时间,比北京时间少8个小时。当然你可以通过修改php.ini配置文件和date_default_timezone_set来设置你需要的时区。

[Date]date.timezone=Europe/Berlin

通过修改date.timezone的值你可以定制时区。北京时间的时区的取值为PRC。


在日期和时间函数中,有一个特别的概念值得了解一下:那就是时间戳。时间戳是一个字符序列,它的意思是从格林尼治时间1970年01月01日00时00分00秒也就是北京时间1970年01月01日08时00分00秒起到现在的总毫秒数。

下面介绍一下获取时间相关的函数。


1.int gmmktime([int $hour[,int $minute[,int $second[,int $month[,int $day[,int $year[,int $is_dst ]]]]]]])

该函数可以获取GMT日期的unix时间戳。函数的参数可以从左到右空着,空出的参数会被设置为相应的当前GMT(格林尼治时间)值。

echo gmmktime();echo "<br/>";echo gmmktime(0,55,3,8,4,2017);echo "<br/>";-->15057285901501808103

2.int mktime([int $hour=date("H")[,$minute=date("i")[,int $sencond=date("s")[,int $month=date("n")[,int $day=date("j")[,int $year=date("Y")[,int $is_dst=-1]]]]]]])

该函数和gmmktime一样,其参数可以从左到右省略,省略的参数会被设置为本地日期和时间的当前值。

返回值:unix时间戳,长整数值。

echo mktime();echo "<br/>";echo mktime(0,55,3,8,4,2017);echo "<br/>";-->15057289121501800903

3.mixed microtime([bool $get_as_float])

如果传入参数为true,那么返回值是一个浮点数,若不带参数则返回一个"微秒  毫秒"格式的字符串。

echo microtime();echo "<br/>";echo microtime(TRUE);echo "<br/>";-->0.22142800 15057291121505729112.2305

4.int time(void)

返回当前unix时间戳。

echo time();echo "<br/>";-->1505729217

5.array getdate([int $timestamp=time()])

该函数返回一个根据timestamp得出的包含日期信息的关联数组。如果没有给出时间戳那么将被认为是本地时间。

echo "<pre>";var_dump(getdate());-->array (size=11)  'seconds' => int 28  'minutes' => int 10  'hours' => int 12  'mday' => int 18  'wday' => int 1  'mon' => int 9  'year' => int 2017  'yday' => int 260  'weekday' => string 'Monday' (length=6)  'month' => string 'September' (length=9)  0 => int 1505729428

让我们看下数组中的元素都分别代表这什么。

senconds:秒 0-59

minutes:分 0-59

hours:小时 0-23

mday:月份中的第几天 1-31

wday:星期中的第几天 0(周日)-6(周六)

mon:月 1-12

year:年 

var_dump(checkdate(8, 33, 2017));echo "<br/>";var_dump(checkdate(8, 30, 2017));echo "<br/>";-->D:\Programs\PHP\PHP_Date\PHP_Date.php:42:boolean falseD:\Programs\PHP\PHP_Date\PHP_Date.php:44:boolean true

yday:一年中的第几天 0-365

weekday:星期几 monday-sunday

month:月份的完整表示

0:自从unix纪元开始到现在的秒数。


个人觉得前面几个函数只有这个是我们用的到的。


计算两个日期的时间差也是我们经常会用到的。在php中,计算时间差要先把日期转化为纪元时间戳在进行运算。

看个简单的实例:

$diff_senconds = $end_time-$start_time;$diff_day = floor($diff_senconds/86400);echo $diff_day;-->366

可以看到,得到两个时间的秒数差后,在自己进行运算就可以得到相差天数,周数等等。

上面的例子中一天的秒数是:24*60*60=86400..


当然了,在实际使用的过程中我们会对用户输入的时间进行检查,避免输入不合法的时间。在php中可以使用checkdate来检查。

var_dump(checkdate(8, 33, 2017));echo "<br/>";var_dump(checkdate(8, 30, 2017));echo "<br/>";-->D:\Programs\PHP\PHP_Date\PHP_Date.php:42:boolean falseD:\Programs\PHP\PHP_Date\PHP_Date.php:44:boolean true


最后提一下可以通过date函数对日期进行格式化。。定制你需要的日期格式。。。参数众多,需要的时候去查阅下manual吧。。