在PHP中计算两个时间戳之间的差异

xqkwcwgp  于 2023-08-02  发布在  PHP
关注(0)|答案(7)|浏览(106)

我在表中使用了两个时间戳,即

starttime    datatype - timestamp and as current timestamp
endtime      datatype - timestamp and default as 0000-00-00 00:00:00

字符串
如何在PHP中计算两个时间戳之间的差异

starttime:   2016-11-30 03:55:06
endtime:     2016-11-30 11:55:06

9fkzdhlc

9fkzdhlc1#

应避免任何程序性的方式。
使用OOP方法计算日期时间差:

$datetime1 = new DateTime('2016-11-30 03:55:06'); // start time
$datetime2 = new DateTime('2016-11-30 11:55:06'); // end time
$interval = $datetime1->diff($datetime2);
echo $interval
     ->format('%Y years %m months %d days %H hours %i minutes %s seconds');
     // 00 years 0 months 0 days 08 hours 0 minutes 0 seconds

字符串
您可以根据需要设置不同的格式。

%Y - use for difference in year
%m - use for difference in months
%d - use for difference in days
%H - use for difference in hours
%i - use for difference in minutes
%s - use for difference in seconds


您可以根据需要删除上述任何值。例如,如果您只对小时差感兴趣,并且知道时间差不能超过24小时,则只使用%H
如果您想获得以秒为单位的总差值,则可以用途:

echo $difference_in_seconds 
     = strtotime('2016-11-30 11:55:06') - strtotime('2016-11-30 03:55:06');
// 28800


这取决于您的需要和您希望有时差的最终格式。
参考文献检查:https://www.php.net/manual/en/datetime.diff.php

4sup72z8

4sup72z82#

你可以使用php strtotime将你的时间戳转换成unix时间戳(秒),然后取其差值。你现在有时间的差异,以秒为单位,可以转换成你所需要的…小时,分钟,天
http://php.net/manual/en/function.strtotime.php
例如:

$ts1 = strtotime($start);
$ts2 = strtotime($end);     
$seconds_diff = $ts2 - $ts1;                            
$time = ($seconds_diff/3600);

字符串

v09wglhw

v09wglhw3#

最简单的答案(当然对我来说)在这里

function dateDifference($date_1 , $date_2 , $differenceFormat = '%a' )
{
    $datetime1 = date_create($date_1);
    $datetime2 = date_create($date_2);

    $interval = date_diff($datetime1, $datetime2);

    return $interval->format($differenceFormat);

}

字符串
在本例中,date_create()函数创建DateTime对象

x8goxv8g

x8goxv8g4#

我创建了一个函数,它可以帮助你从两个Unix时间戳中获取小时,分钟和天,只需将type作为第三个参数传递。

public function diffBtwTimesAsPerType($start, $end, $returnType=1) {
    $seconds_diff = $start - $end;
    if($returnType == 1){
        return $seconds_diff/60;//minutes
    }else if($returnType == 2){
        return $seconds_diff/3600;//hours
    }else{
        return $seconds_diff/3600/24; //days
    }
}

echo "<br> Minutes = ".diffBtwTimesAsPerType(1593714600, 1593541800, 1);//minutes
echo "<br> Hours = ".diffBtwTimesAsPerType(1593714600, 1593541800, 2);//hours
echo "<br> Days = ".diffBtwTimesAsPerType(1593714600, 1593541800, 3);//days

字符串

jjhzyzn0

jjhzyzn05#

@atul-baldaniya,我已经修改了你的解决方案,以避免负值,并返回整数结果而不是十进制值。

function diffBtwTimesAsPerType($start, $end, $returnType=1) {
    $seconds_diff = $end - $start;
    if($returnType == 1){
        return round($seconds_diff/60);//minutes
    }else if($returnType == 2){
        return round($seconds_diff/3600);//hours
    }else{
        return round($seconds_diff/3600/24); //days
    }
}

字符串

tyky79it

tyky79it6#

如果需要**00:00:00(时、分、秒)**格式的差值,可以使用此功能。
我使用sprintf()是因为在一个数字结果前加零。

function timeDifference($start, $stop){
    
$diff = strtotime($stop) - strtotime($start);
$fullHours   = floor($diff/(60*60));
$fullMinutes = floor(($diff-($fullHours*60*60))/60);
$fullSeconds = floor($diff-($fullHours*60*60)-($fullMinutes*60));

return sprintf("%02d",$fullHours) . ":" . sprintf("%02d",$fullMinutes) . ":" . sprintf("%02d",$fullSeconds);
}

字符串

zaq34kh6

zaq34kh67#

试试这个代码,测试phpfiddle.org:-

function timestampdiff($qw,$saw)
{
    $datetime1 = new DateTime("@$qw");
    $datetime2 = new DateTime("@$saw");
    $interval = $datetime1->diff($datetime2);
    return $interval->format('%Hh %Im');
}
echo timestampdiff('1524794340', '1524803100');

字符串

相关问题