UNIX时间戳和日期间的转换与计算实例

本文介绍了UNIX时间戳的概念及其在PHP中的应用,包括如何使用mktime()和strtotime()函数进行日期和时间转换,并提供了毕业倒计时及年龄计算的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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
?>









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值