UNIX时间戳是保存日期和时间的一种紧凑简洁的方法,是大多数UNIX系统中保存当前日期和时间的一种方法,也是在大多数计算机语言中表示日期和时间的一种标准格式。以32位整数表示格林威治标准时间,例如,使用证书11230499325表示当前时间的时间戳。UNIX时间戳是从1970年1月1日零点(UTC/GMT的午夜)开始起到当前时间所通过的秒数。1970年1月1日零点做为全部日期计算的基础,这个日期一般成为UNIX纪元。php
将日期和时间转变成UNIX时间戳html
在PHP中,若是须要将日期和时间转变成UNIX时间戳,能够调用mktime()函数。该函数的原型以下所示:函数
int mktime([int hour [,int minute[,int second[,int month[,int day[int year]]]]]])学习
该函数中全部参数都是可选的,若是参数为空,默认将当前时间转变成UNIX时间戳。这样,和直接调用time()函数获取当前的UNIX时间戳功能相同。参数也能够从右向左省略,任何省略的参数会被设置成本地日期和时间的当前值。若是只想转变日期,对具体的时间不在意,能够将前三个转变时间的参数都设置为0.mktime()函数对于日期运算和验证很是有用,它能够自动校政越界的输入。以下所示:spa
1
2
3
4
5
6
|
<?php
echo
date
(
"Y-m-d"
,
mktime
(0,0,0,12,36,2008)).
"\n"
;
//日期超过31天,计算后输出 2009-01-05
echo
date
(
"Y-m-d"
,
mktime
(0,0,0,14,1,2010)).
"\n"
;
//月份超过12月,计算后输出2011-02-01
echo
date
(
"Y-m-d"
,
mktime
(0,0,0,1,1,2012)).
"\n"
;
//没有问题的转变,输出结果2012-01-01
echo
date
(
"Y-m-d"
,
mktime
(0,0,0,1,1,99)).
"\n"
;
//会将99年转变为1999年, 1990-01-01
?>
|
若是有须要将任何英文文本的日期时间描述直接解析为UNIX时间戳,可使用strtotime()函数,该函数的圆形以下所示:设计
int strtotime(string time[,int now])unix
函数strtotime()能够用英语的天然语言建立讴歌时刻的时间戳,接受一个包含美国英语日期格式的字符串并尝试将其解析为UNIX时间戳(自January 1 1970 00:00:00 GMT起的描述),其值相对于now参数给出的时间,若是没有提供次参数则用系统当前时间。该函数执行成功则返回时间戳,不然返回FALSE。和mktime()的对好比下所示:code
1
2
3
4
5
6
|
<?php
echo
date
(
"Y-m-d"
,
strtotime
(
"now"
));
//输出如今的时间戳
echo
date
(
"Y-m-d"
,
strtotime
(
"8 may 2012"
));
//输出2012-05-08
echo
date
(
"Y-m-d"
,
strtotime
(
"+1 day"
));
//输出如今的日期加1天
echo
date
(
"Y-m-d"
,
strtotime
(
"last monday"
));
//输出2012-04-02
?>
|
下例经过使用strtotime()函数编写一个记念日的倒计时程序,来介绍一下该函数在项目开发中的实际应用,示例代码以下所示:htm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
<?php
$now
=
strtotime
(
"now"
);
//当前时间
$endtime
=
strtotime
(
"2014-08-18 08:08:08"
);
//设定毕业时间,转成时间戳
$second
=
$endtime
-
$now
;
//获取毕业时间到如今时间的时间戳(秒数)
$year
=
floor
(
$second
/3600/24/365);
//从这个时间戳中换算出年头数
$temp
=
$second
-
$year
*365*24*3600;
//从这个时间戳中去掉全年的秒数,就剩下月份的秒数
$month
=
floor
(
$temp
/3600/24/30);
//从这个时间戳中共换算出月数
$temp
=
$temp
-
$month
*30*3600*24;
//从时间戳中去掉整月的秒数,就剩下天的描述
$day
=
floor
(
$temp
/24/3600);
//从这个时间戳中换算出剩余的天数
$temp
=
$temp
-
$day
*3600*24;
//从这个时间戳中去掉成天的秒数,就剩下小时的秒数
$hour
=
floor
(
$temp
/3600);
//从这个时间戳中换算出剩余的小时数
$temp
=
$temp
-
$hour
*3600;
//从时间戳中去掉小时的秒数,就剩下分的秒数
$minute
=
floor
(
$temp
/60);
//从这个时间戳中换算出剩余的分数
$second1
=
$temp
-
$minute
*60;
//最后只有剩余的秒数了
echo
"距离培训毕业还有($year)年($month)月($day)天($hour)小时($minute)分($second1)秒。"
;
?>
|
注意:若是给定的年份是两位数字的格式,则其值0-69表示2000-2069,70-100表示1970-2000。教程
日期的计算
在PHP中,计算两个日期之间相隔的长度,最简单的方法就是经过计算两个UNIX时间戳之差来得到。例如,在PHP脚本中接收来自HTML表单用户提交的出生日期,计算这个用户的年龄。以下所示:
1
2
3
4
5
6
7
8
9
10
11
12
|
<?php
//从表单中接收用户提交的出生日期中的年份、月份、天
$year
= 1981;
$month
= 11;
$day
= 05;
$birthday
=
mktime
(0,0,0,
$month
,
$day
,
$year
);
//将出生日期转变为UNIX时间戳
$nowdate
= time();
//调用time()函数获取当前时间的UNIX时间戳
$ageunix
=
$nowdate
-
$birthday
;
//两个时间戳相减获取用户年龄的UNIX时间戳
$age
=
floor
(
$ageunix
/3600/24/365);
//将UNIX时间戳除以一年的秒数获取用户的年龄
echo
"年龄:$age"
;
?>
|
在以上的脚本中,调用mktime()函数将从用户出生日期转变为UNIX时间戳,再调用time()函数获取当前时间的UNIX时间戳。由于这个日期的格式都是使用整数表示的,因此能够将他们相减。又将计算后获取的UNIX时间戳除以一年的秒数,将UNIX时间戳转变为以年度量的单位。