php时间函数time()、date()、mktime()、strtotime()、date_default_timezone_set(get)区别和分析

PHP 1292 0 2014-01-18

php时间函数time()、date()、mktime()、strtotime()、date_default_timezone_set(get)区别和分析

php时间函数真的很多,有时候弄得人有点头大,再加上php的好搭档mysql自身也有时间处理函数,所以有必要深入分析下时间函数。php处理 时间的主要的几个有time()、date()、mktime()、strtotime()、 date_default_timezone_set(get)可能有的函数大家都很熟悉了,有的自己用的不多。下面我们结合实际例子来讲解下。

比如现在我想用php时间函数得到现在的时间,你可能会这样写。

<?php

echo time();

?>

输出一下看看,是一大串的数字,不是我们想看到的时间格式效果,那这写数字是什么东东呢?这个就是我们不怎么了解的UTC时间,它是怎么计算的呢? 它是格林威治时间 即1970 年 1 月 1 日 00:00:00 到当前时间的秒数,如果你再不明白,我再给你说的透一点,它就是现在的时间减去1970.1.1 00:00:00 然后把它们的差化成秒为单位的数值就是我们现在输出的值了。

我们得到的UTC时间可能我们知道怎么再转换过来,但是别人不知道啊,所以,我们要给这个UTC时间转换下格式,让它成为我们能看的懂的时间,那么现在你可以选择date()函数。

<?php

echo date(‘”Y-m-d H:i:s”);

?>

上面的一句代码会输出什么呢?运行下,好了,格式我们可以懂了,但是不是说这个函数是格式化函数吗?怎么也能得到时间呢?呵呵 这个函数的第二个参数我没有写出来,第二个参数是一个UTC参数串,如果不给,那么就会默认输出time()的格式化时间,在这里我们不想输出当前的时 间,我们想输出2012-12-21号世界末日的时间,怎么输出呢,这时候我们可以用mktime()函数了。

<?php

echo date(“Y-m-d H:i:s”,mktime(0,0,0,12,21,2012));

?>

这样输出来  就是你要的时间了,mktime()函数根据你输入的格式返回一个UTC时间,但是一定要记住参数的顺序,小时-分钟-秒-月-日-年。

细心的朋友一定发现了,我用date去格式化现在的时候,输出的不是现在的时间啊,比现在的时间晚八个小时啊。这就是我们所说的时差了,UTC时间 是根据格林威治,就是这个地方把地球分为了东西两部分,我们在东八区,按照地理知识我们应该是这个地方快8个小时,所以,我们的函数就出现了“错误”,少 给我们加了8个小时。

怎么避免上面的现象发生呢,很简单就是用到了这个函数,date_default_timezone_set()

我们可以先来看下我们这个地方时区是怎么设定的

<?php

echo  date_default_timezone_get();

?>

输出的是“UTC”,说明我们是按照格林威治时间计算的,这个函数是会经过判断后才得出你所在的地方应该按照什么来计算你的时间。判断的先后如下:

1:用 date_default_timezone_set() 函数设定的时区(如果设定了的话)

2:TZ 环境变量(如果非空)

3:date.timezone 配置选项(如果设定了的话)

4:自己推测(如果操作系统支持)

5:如果以上选择都不成功,则返回 UTC

我们可以从条件中看到,我们可以用date_default_timezone_set()这个函数来设定我们所在的时区,

<?php

date_default_timezone_set(“Etc/GMT-8″);

echo date(“Y-m-d H:i:s”);

?>

运行上面的代码 是不是就是你想要的时间了。date_default_timezone_set()这个函数的参数可以去找下资料,我就不一一讲解了,大部分我们主要用的是Etc/GMT-8 即东八区。

好了上面的函数你可能了解的差不多了,下面我们来了解一个比较人性化的函数 strtotime(),为什么说它人性化呢,看了下面就知道了

<?php
echo strtotime("now"), "\n";
echo
strtotime("10 September 2000"), "\n";
echo
strtotime("+1 day"), "\n";
echo
strtotime("+1 week"), "\n";
echo
strtotime("+1 week 2 days 4 hours 2 seconds"), "\n";
echo
strtotime("next Thursday"), "\n";
echo
strtotime("last Monday"), "\n";
?>

上一篇:PHP magic_quotes_gpc的详细使用方法

下一篇:PHP程序中的 Notice: Undefined index:解决方法

讨论数量:0

请先登录再发表讨论。 2024-04-26

天涯网魂
3 杠 5 星
TA 的文章
TA 的随言
TA 的资源链