查看: 690|回复: 0

php计算两个时间戳之间相差多长时间

[复制链接]

748

主题

39

回帖

3907

积分

管理员

总舵主

积分
3907
QQ
发表于 2024-5-25 19:49:07 | 显示全部楼层 |阅读模式
假设你两个时间戳为$a,$b;
你可以用$c=$a-$b;(反正就是大的减小的),这时$c就是两个时间间隔的秒数了。
想求两个时间间隔的天数就用:
  1. $c/(60*60*24)
复制代码

一天的毫秒数是:86400,所以直接
  1. $c/86400
复制代码

答案也是一样的

想求两个时间间隔的小时数就用:
  1. $c/(60*60)
复制代码
  1. //PHP 计算两个时间戳之间相差的时间
  2. //功能:计算两个时间戳之间相差的日时分秒
  3. //$begin_time  开始时间戳
  4. //$end_time 结束时间戳
  5. public function timediff($begin_time,$end_time)
  6. {
  7.     if($begin_time < $end_time){
  8.         $starttime = $begin_time;
  9.         $endtime = $end_time;
  10.     }else{
  11.         $starttime = $end_time;
  12.         $endtime = $begin_time;
  13.     }
  14.     //计算天数
  15.     $timediff = $endtime-$starttime;
  16.     $days = intval($timediff/86400);
  17.     //计算小时数
  18.     $remain = $timediff%86400;
  19.     $hours = intval($remain/3600);
  20.     //计算分钟数
  21.     $remain = $remain%3600;
  22.     $mins = intval($remain/60);
  23.     //计算秒数
  24.     $secs = $remain%60;
  25.     $res = array("day" => $days,"hour" => $hours,"min" => $mins,"sec" => $secs);
  26.     return $res;
  27. }
  28. public function ceshitime()
  29. {
  30.     return json($this->timediff(strtotime('2016-09-12 12:00:00'),strtotime('2016-09-15 21:50:21')));
  31.       
  32. }
复制代码
结果
可实现 到期提醒  倒计时等功能

使用PHP实现计算两个日期间隔的年、月、周、日数
  1. <?php
  2.     function format($a,$b){
  3.         //检查两个日期大小,默认前小后大,如果前大后小则交换位置以保证前小后大
  4.         if(strtotime($a)>strtotime($b)) list($a,$b)=array($b,$a);
  5.         $start  = strtotime($a);
  6.         $stop   = strtotime($b);
  7.         $extend = ($stop-$start)/86400;
  8.         $result['extends'] = $extend;
  9.         if($extend<7){                //如果小于7天直接返回天数
  10.             $result['daily'] = $extend;
  11.         }elseif($extend<=31){        //小于28天则返回周数,由于闰年2月满足了
  12.             if($stop==strtotime($a.'+1 month')){
  13.                 $result['monthly'] = 1;
  14.             }else{
  15.                 $w = floor($extend/7);
  16.                 $d = ($stop-strtotime($a.'+'.$w.' week'))/86400;
  17.                 $result['weekly']  = $w;
  18.                 $result['daily']   = $d;
  19.             }
  20.         }else{
  21.             $y=    floor($extend/365);
  22.             if($y>=1){                //如果超过一年
  23.                 $start = strtotime($a.'+'.$y.'year');
  24.                 $a     = date('Y-m-d',$start);
  25.                 //判断是否真的已经有了一年了,如果没有的话就开减
  26.                 if($start>$stop){
  27.                     $a = date('Y-m-d',strtotime($a.'-1 month'));
  28.                     $m =11;
  29.                     $y--;     
  30.                 }
  31.                 $extend = ($stop-strtotime($a))/86400;
  32.             }
  33.             if(isset($m)){
  34.                 $w = floor($extend/7);
  35.                 $d = $extend-$w*7;
  36.             }else{
  37.                 $m = isset($m)?$m:round($extend/30);
  38.                 $stop>=strtotime($a.'+'.$m.'month')?$m:$m--;
  39.                 if($stop>=strtotime($a.'+'.$m.'month')){
  40.                     $d=$w=($stop-strtotime($a.'+'.$m.'month'))/86400;
  41.                     $w = floor($w/7);
  42.                     $d = $d-$w*7;
  43.                 }
  44.             }
  45.             $result['yearly']  = $y;
  46.             $result['monthly'] = $m;
  47.             $result['weekly']  = $w;
  48.             $result['daily']   = isset($d)?$d:null;
  49.         }
  50.         return array_filter($result);
  51.     }
  52.    
  53.     print_r(format('2012-10-1','2012-12-15'));
  54. ?>
复制代码
结果:
Array([extends]=>75[monthly]=>2[weekly]=>2)
php 查询某天所在的周数及对应周的起始日期
  1. /**
  2. * @file
  3. * @version  1.1
  4. * @author  Q
  5. * @date  2012-8-7 最后修改时间
  6. * @brief  
  7. */
  8.     //获取某个日期的 周数、周对应的开始结束时间
  9.     private function getWeekStartEndDay($day)
  10.     {
  11.         $g  = strftime("%u",strtotime($day));
  12.         return array('week_num'=>strftime("%V",strtotime($day)),'week_start_day'=>strftime('%Y-%m-%d',strtotime($day)-($g-1)*86400),'week_start_day_cn'=>strftime('%Y年%m月%d日',strtotime($day)-($g-1)*86400),'week_end_day'=>strftime('%Y-%m-%d',strtotime($day) + (7-$g)*86400),'week_end_day_cn'=>strftime('%Y年%m月%d日',strtotime($day) + (7-$g)*86400));
  13.     }
复制代码


道不同,不相为谋!理想要有,万一实现了呢?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注公众号

相关侵权、举报、投诉及建议等,请发 E-mail:2513533699@qq.com

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.|鲁ICP备19000917号|鲁公网安备37078302000320号

在本版发帖
关注公众号
QQ客服返回顶部