在php中以分钟,小时或秒为单位获取两个时间戳之间的差异

时间:2017-09-07 16:27:56

标签: php

我有两个时间戳,我会根据

来获取差异
  1. 如果超过60秒可以得到分钟
  2. 如果超过60分钟的时间差异
  3. 在我的代码中我有

     $diff = ($truckHistory->created_at - $model->created_at);
    
     return $this->convertToSecMinHour($diff)
    
      public function convertToSecMinHour($diff){
        switch($diff){
          case ($diff <= 60):{
                return $diff. "sec"
                 break;
              } 
    
           //stuck for minutes and hours cases
        }
    
    
      }
    

    以上以秒为单位返回 所以我试过了

    import sys, os, time
    

4 个答案:

答案 0 :(得分:2)

我有这个功能,但它包括其他测量时间的方法。你可以简单地删除那些你不需要的东西。

public function timeAgo($timestamp) {
    $estimateTime = time() - $timestamp;

    if ($estimateTime < 1) {
        return 'less than 1 second ago';
    }

    $condition = array( 
        12 * 30 * 24 * 60 * 60  =>  'year',
        30 * 24 * 60 * 60       =>  'month',
        24 * 60 * 60            =>  'day',
        60 * 60                 =>  'hour',
        60                      =>  'minute',
        1                       =>  'second'
    );

    foreach ($condition as $secs => $str) {
        $d = $estimateTime / $secs;

        if($d >= 1) {
            $r = round( $d );
            return $r . ' ' . $str . ( $r > 1 ? 's' : '' ) . ' ago';
        }
    }
}

答案 1 :(得分:0)

您可以快速使用此功能,只需将秒数传递给它。 Example here

$time1 = '1504802148'; // Unix timeStamp
$timeDiff = ceil((time() - $time1));

echo secondsToTime($timeDiff);

function secondsToTime($seconds) {
  $dtF = new \DateTime('@0');
  $dtT = new \DateTime("@$seconds");
  $makeTime = $dtF->diff($dtT)->format('%ad,%hh,%im,%ss');
  $data = explode(",", $makeTime);
  $array = array('0d', '0h', '0m');
  $time = array_diff($data, $array);
  return implode("", $time);
}

答案 2 :(得分:0)

使用此功能:

<?php
$diff = (time() - time()+60);
$diff2 = (time() - time()+2000);
$diff3 = (time() - time()+5000);

echo convertToSecMinHour($diff)."<br>";
echo convertToSecMinHour($diff2)."<br>";
echo convertToSecMinHour($diff3)."<br>";

function convertToSecMinHour($diff, $decimals = 2) {
    switch($diff){
        case ($diff <= 60):
            $result = $diff;
            $unit = "sec";
            break;
        case ($diff > 60 && $diff < 3600):
            $result =  ($diff / 60);
            $unit = "min";
            break;
        case ($diff >= 3600):
            $result = ($diff / (60 * 60));
            $unit = "hrs";
            break;
        default:
            $result = 0;
            $unit = "";
    }
    return round($result, $decimals).$unit;
}

如果差异小于60,则以秒为单位返回差异(即20秒),如果差异在60到3600秒之间,则以分钟(即20分钟)的差异,以及小时差异(即20小时)如果差异大于3600.第二个参数是结果中所需的小数位数(默认为2)。

Demo

答案 3 :(得分:0)

我认为您想要$ result,还有其他变量可供使用

$result;
$hour = $diff / 3600;
if ($hour == 0) {
    $min = ($diff % 3600) / 60;
    if ($min == 0) {
        $sec = ($diff % 3600) % 60;
        $result = $sec;
    }else{
        $result = $min;
    }
}else{
    $result = $hour;
}