1、UNIX时间戳的简介
UNIX时间戳是保存日期和时间的一种紧凑简洁的方法,是大多数UNIX系统中保存当前日期和时间的一种方法,是根据一个时区进行标准化而设计的一种通用格式,也是在大多数计算机语言中表示日期和时间的一种标准格式。以32位整数表示格林威治标准时间,所以特别适用于计算机处理,1970年1月1日通常称为UNIX纪元。
2、 将日期和时间转变成UNIX时间截
(1)strtotime()和mktime()的对比
mktime 格式:int mktime[int hour[,int minute[,int second[,int month[,int day[,int year]]]]]]
所有参数都是可选的,如果参数没空,默认将当前时间转变成UNIX时间戳。这样,和直接调用time()函数获取当前的UNIX时间戳的功能相同。参数也可以从右向左省略,任何省略的参数会被设置成本日期和时间的当前值。如果只想转变日期,对具体的时间不在乎,可以将前三个转变时间的参数都设置为0,mktime()函数对于日期运算和验证很有用,可以自动校正越界的输入。
在PHP中,调用mktime()函数将日期和时间转变成UNIX时间戳:
<span style="font-size:14px;"><?php
echo date("Y-m-d",mktime(0,0,0,12,36,2016))."<br>"; //日期超过31天,计算后输出2017-01-05
echo date("Y-m-d",mktime(0,0,0,14,3,2015))."<br>"; //月份超过12月,计算输出2016-02-03
echo date("Y-m-d",mktime(0,0,0,1,1,2015))."<br>"; //没有问题的转变,输出 2015-01-01
echo date("Y-m-d",mktime(0,0,0,1,1,15))."<br>"; //会将15年转换为2015年,2015-01-01
?></span>
*给定的年份是两位数字的格式,则其值0-69表示2000-2069,70-100表示1970-2000
strtotime() 格式:int strtotime(string time[,int now])
函数strtotime()可以用英语的自然语言创建的时间戳,接受一个包含美国英语日期格式的字符串并尝试将其解析为UNIX时间戳,其值相对于now参数给出的时间,如果没有提供参数则用系统当前时间
调用strtotime()函数
<span style="font-size:14px;"><?php
echo date("Y-m-d",strtotime("now"))."<br/>"; //输出现在的时间戳
echo date("Y-m-d",strtotime("8 may 2014"))."<br/>"; //输出2014-05-08
echo date("Y-m-d",strtotime("+1 day"))."<br/>"; //输出现在的日期+1
echo date("Y-m-d",strtotime("last monday"))."<br/>"; //输出2016-08-22
?></span>
(2)使用strtotime()函数编写一个毕业倒计时的程序
<span style="font-size:14px;"><?php
$now = strtotime("now"); //当前时间
$endtime = strtotime("2018-08-18 08:08:08"); //毕业时间,转成时间戳
$second = $endtime-$now; //获取毕业时间到现在时间的时间戳(秒数)</span>
<span style="font-size:14px;">$year = floor($second/3600/24/365); //从获取的时间戳中换算出年头数
$temp = $second-$year*365*24*3600; //从时间戳中去掉整年的时间戳,剩下月份秒数
$month = floor($temp/3600/24/30); //从时间戳中换算出月数
$temp = $temp-$month*30*24*3600; //从时间戳中去掉整月的的秒数,剩下天的秒数
$day = floor($temp/3600/24); //从时间戳中换算出天数
$temp = $temp-$day*24*3600; <span style="font-family: Arial, Helvetica, sans-serif;"> //从时间戳中去掉整天的秒数,剩下小时的秒数</span>
$hour = floor($temp/3600); <span style="font-family: Arial, Helvetica, sans-serif;"> //从时间戳中换算出小时数</span>
$temp = $temp-$hour*3600; <span style="font-family: Arial, Helvetica, sans-serif;"> //从时间戳中去掉整天的秒数,剩下小时的秒数</span>
$minute = floor($temp/60); //从时间戳中换算出分钟数
$second = $temp-$minute*60; //剩余的秒数
echo "距离毕业还有($year)年($month)月($day)天($hour)小时($minute)分($second)秒";
?></span>
(3)日期之间相隔的长度计算——年龄计算
<?php
//从表单中接受用户提交出生日期中的年月日
$year = 1991;
$month = 12;
$day = 26;
$birthday = mktime(0,0,0,$month,$day,$year); //将出生日期转变为UNIX时间戳
$now = time(); //获取当前时间的UNIX时间戳
$ageunix = $now-$birthday; //获取用户年龄的UNIX时间戳
$age = floor($ageunix/3600/24/365); //将UNIX时间戳除以一年的秒数获取用户的年龄
echo "年龄:"."$age"; //输出 年龄:24
?>