这个需求是计算两个时间的差值,当然PHP在5.3版本已经提供了相关的计算函数,本文也会有该函数的示例,除了PHP提供的解决方法之外,这里会再提供几种解决方式以供参考. 需求如下
差值小于24小时,为今天
差值小于30天,直接显示剩余天数
差值大于30天,显示1月之后
内置函数解决方案
使用函数date_diff计算两日期差值,返回的是DateInterval的object数据,直接根据相关需求进行数据处理即可.==注意:传入日期格式,对传入日期进行格式化==,当然关于天的计算标准,需要根据情况来看,比如1月1号到1月5号,系统计算出来的是4天,但是人们会认为1号到5号是5天,这个根据实际情况来进行一个细节处理.
/**
* 传入日期格式 2017-01-23
* @param $begin_time
* @param $end_time
* @return DateInterval|false
*/
function time_difference ( $begin_time , $end_time ) {
$datetime1 = date_create ( $begin_time );
$datetime2 = date_create ( $end_time );
$interval = date_diff ( $datetime1 , $datetime2 );
return $interval;
}
输出与结果
//输出
$a = time_difference('2017-1-1','2017-1-5');
var_dump($a);
//结果
object(DateInterval)#3 (15) {
["y"]=>
int(0)
["m"]=>
int(0)
["d"]=>
int(4)
["h"]=>
int(0)
["i"]=>
int(0)
["s"]=>
int(0)
["weekday"]=>
int(0)
["weekday_behavior"]=>
int(0)
["first_last_day_of"]=>
int(0)
["invert"]=>
int(1)
["days"]=>
int(4)
["special_type"]=>
int(0)
["special_amount"]=>
int(0)
["have_weekday_relative"]=>
int(0)
["have_special_relative"]=>
int(0)
}
简单粗暴方式
根据需求,直接使用比较原始,比较有效的方式进行计算即可.当然这种方式的局限性比较大,根据情况自行决定是否使用. 代码示例
$num = strtotime('2017-1-5') - strtotime('2017-1-1');
$diff = floor($num/60/60/24);
if($diff >= 30){
echo '1月';
}elseif($diff >=1){
echo ($diff+1).'天'; //这里是否+1自己决定,上面已经说过,不再赘述
}elseif($diff < 1){
echo '今天';
}
输出结果5天
时间差计算
function time2Units ( $time ) {
$year = floor ( $time / 60 / 60 / 24 / 365 );
$time -= $year * 60 * 60 * 24 * 365;
$month = floor ( $time / 60 / 60 / 24 / 30 );
$time -= $month * 60 * 60 * 24 * 30;
$week = floor ( $time / 60 / 60 / 24 / 7 );
$time -= $week * 60 * 60 * 24 * 7;
$day = floor ( $time / 60 / 60 / 24 );
$time -= $day * 60 * 60 * 24;
$hour = floor ( $time / 60 / 60 );
$time -= $hour * 60 * 60;
$minute = floor ( $time / 60 );
$time -= $minute * 60;
$second = $time;
$elapse = '';
$unitArr = array ( '年' => 'year' ,
'个月' => 'month' ,
'周' => 'week' ,
'天' => 'day' ,
'小时' => 'hour' ,
'分钟' => 'minute' ,
'秒' => 'second'
);
foreach ( $unitArr as $cn => $u ) {
if ( $$u > 0 ) {
$elapse = $$u . $cn;
break;
}
}
return $elapse;
}
输出与解决
//输出
$num = strtotime('2017-1-5') - strtotime('2017-1-1');
echo time2Units ( $num );
//结果
4天
这里就介绍着三种计算时间差的方法,当然计算时间差方法不只是这三种,可以说这种方法根据自己的想法来做,会出现很多种计算方式,可能每个人的做法都不相同,当然最后的计算结果对了才是最重要的.