PHP基础之时间和日期

在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/>";
-->
1505728590
1501808103

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/>";
-->
1505728912
1501800903

3.mixed microtime([bool $get_as_float])

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

echo microtime();
echo "<br/>";
echo microtime(TRUE);
echo "<br/>";
-->
0.22142800 1505729112
1505729112.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 false

D:\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 false

D:\Programs\PHP\PHP_Date\PHP_Date.php:44:boolean true


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



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值