在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吧。。