把秒转换成天,小时,分钟和秒

我想转换一个变量 $uptime是秒,成天,小时,分钟和秒。

例如:

$uptime = 1640467;

结果应该是:

18 days 23 hours 41 minutes
185817 次浏览

This is the function rewritten to include days. I also changed the variable names to make the code easier to understand...

/**
* Convert number of seconds into hours, minutes and seconds
* and return an array containing those values
*
* @param integer $inputSeconds Number of seconds to parse
* @return array
*/


function secondsToTime($inputSeconds) {


$secondsInAMinute = 60;
$secondsInAnHour  = 60 * $secondsInAMinute;
$secondsInADay    = 24 * $secondsInAnHour;


// extract days
$days = floor($inputSeconds / $secondsInADay);


// extract hours
$hourSeconds = $inputSeconds % $secondsInADay;
$hours = floor($hourSeconds / $secondsInAnHour);


// extract minutes
$minuteSeconds = $hourSeconds % $secondsInAnHour;
$minutes = floor($minuteSeconds / $secondsInAMinute);


// extract the remaining seconds
$remainingSeconds = $minuteSeconds % $secondsInAMinute;
$seconds = ceil($remainingSeconds);


// return the final array
$obj = array(
'd' => (int) $days,
'h' => (int) $hours,
'm' => (int) $minutes,
's' => (int) $seconds,
);
return $obj;
}

Source: CodeAid() - http://codeaid.net/php/convert-seconds-to-hours-minutes-and-seconds-(php)

下面是一个简单的8行 PHP 函数,它可以将一些秒数转换成一个人类可读的字符串,包括大量秒数的月数:

PHP function seconds2human()

function seconds2human($ss) {
$s = $ss%60;
$m = floor(($ss%3600)/60);
$h = floor(($ss%86400)/3600);
$d = floor(($ss%2592000)/86400);
$M = floor($ss/2592000);


return "$M months, $d days, $h hours, $m minutes, $s seconds";
}

This can be achieved with DateTime class

Function:

function secondsToTime($seconds) {
$dtF = new \DateTime('@0');
$dtT = new \DateTime("@$seconds");
return $dtF->diff($dtT)->format('%a days, %h hours, %i minutes and %s seconds');
}

用途:

echo secondsToTime(1640467);
# 18 days, 23 hours, 41 minutes and 7 seconds

demo

尽管这是一个相当古老的问题——人们可能会发现这些有用的(不是为了快而写的) :

function d_h_m_s__string1($seconds)
{
$ret = '';
$divs = array(86400, 3600, 60, 1);


for ($d = 0; $d < 4; $d++)
{
$q = (int)($seconds / $divs[$d]);
$r = $seconds % $divs[$d];
$ret .= sprintf("%d%s", $q, substr('dhms', $d, 1));
$seconds = $r;
}


return $ret;
}


function d_h_m_s__string2($seconds)
{
if ($seconds == 0) return '0s';


$can_print = false; // to skip 0d, 0d0m ....
$ret = '';
$divs = array(86400, 3600, 60, 1);


for ($d = 0; $d < 4; $d++)
{
$q = (int)($seconds / $divs[$d]);
$r = $seconds % $divs[$d];
if ($q != 0) $can_print = true;
if ($can_print) $ret .= sprintf("%d%s", $q, substr('dhms', $d, 1));
$seconds = $r;
}


return $ret;
}


function d_h_m_s__array($seconds)
{
$ret = array();


$divs = array(86400, 3600, 60, 1);


for ($d = 0; $d < 4; $d++)
{
$q = $seconds / $divs[$d];
$r = $seconds % $divs[$d];
$ret[substr('dhms', $d, 1)] = $q;


$seconds = $r;
}


return $ret;
}


echo d_h_m_s__string1(0*86400+21*3600+57*60+13) . "\n";
echo d_h_m_s__string2(0*86400+21*3600+57*60+13) . "\n";


$ret = d_h_m_s__array(9*86400+21*3600+57*60+13);
printf("%dd%dh%dm%ds\n", $ret['d'], $ret['h'], $ret['m'], $ret['s']);

结果:

0d21h57m13s
21h57m13s
9d21h57m13s
gmdate("d H:i:s",1640467);

结果是1923:41:07。即使时间是额外的1秒钟,它也会导致一天的改变。结果是19岁。您可以根据自己的需要引爆结果并修复此问题。

This is a function i used in the past for substracting a date from another one related with your question, my principe was to get how many days, hours minutes and seconds has left until a product has expired :

$expirationDate = strtotime("2015-01-12 20:08:23");
$toDay = strtotime(date('Y-m-d H:i:s'));
$difference = abs($toDay - $expirationDate);
$days = floor($difference / 86400);
$hours = floor(($difference - $days * 86400) / 3600);
$minutes = floor(($difference - $days * 86400 - $hours * 3600) / 60);
$seconds = floor($difference - $days * 86400 - $hours * 3600 - $minutes * 60);


echo "{$days} days {$hours} hours {$minutes} minutes {$seconds} seconds";
function seconds_to_time($seconds){
// extract hours
$hours = floor($seconds / (60 * 60));


// extract minutes
$divisor_for_minutes = $seconds % (60 * 60);
$minutes = floor($divisor_for_minutes / 60);


// extract the remaining seconds
$divisor_for_seconds = $divisor_for_minutes % 60;
$seconds = ceil($divisor_for_seconds);


//create string HH:MM:SS
$ret = $hours.":".$minutes.":".$seconds;
return($ret);
}

下面是一些我喜欢使用的代码,用于获取两个日期之间的持续时间。它接受两个日期,并给你一个很好的句子结构的答复。

这是发现的 给你代码的一个稍微修改过的版本。

<?php


function dateDiff($time1, $time2, $precision = 6, $offset = false) {


// If not numeric then convert texts to unix timestamps


if (!is_int($time1)) {
$time1 = strtotime($time1);
}


if (!is_int($time2)) {
if (!$offset) {
$time2 = strtotime($time2);
}
else {
$time2 = strtotime($time2) - $offset;
}
}


// If time1 is bigger than time2
// Then swap time1 and time2


if ($time1 > $time2) {
$ttime = $time1;
$time1 = $time2;
$time2 = $ttime;
}


// Set up intervals and diffs arrays


$intervals = array(
'year',
'month',
'day',
'hour',
'minute',
'second'
);
$diffs = array();


// Loop thru all intervals


foreach($intervals as $interval) {


// Create temp time from time1 and interval


$ttime = strtotime('+1 ' . $interval, $time1);


// Set initial values


$add = 1;
$looped = 0;


// Loop until temp time is smaller than time2


while ($time2 >= $ttime) {


// Create new temp time from time1 and interval


$add++;
$ttime = strtotime("+" . $add . " " . $interval, $time1);
$looped++;
}


$time1 = strtotime("+" . $looped . " " . $interval, $time1);
$diffs[$interval] = $looped;
}


$count = 0;
$times = array();


// Loop thru all diffs


foreach($diffs as $interval => $value) {


// Break if we have needed precission


if ($count >= $precision) {
break;
}


// Add value and interval
// if value is bigger than 0


if ($value > 0) {


// Add s if value is not 1


if ($value != 1) {
$interval.= "s";
}


// Add value and interval to times array


$times[] = $value . " " . $interval;
$count++;
}
}


if (!empty($times)) {


// Return string with times


return implode(", ", $times);
}
else {


// Return 0 Seconds


}


return '0 Seconds';
}

资料来源: https://gist.github.com/ozh/8169202

一个扩展版本的 格拉维的绝佳解决方案,具有整数验证,解决1 s 问题,以及数年和数月的额外支持,代价是计算机解析友好性降低,有利于更加人性化:

<?php
function secondsToHumanReadable(/*int*/ $seconds)/*: string*/ {
//if you dont need php5 support, just remove the is_int check and make the input argument type int.
if(!\is_int($seconds)){
throw new \InvalidArgumentException('Argument 1 passed to secondsToHumanReadable() must be of the type int, '.\gettype($seconds).' given');
}
$dtF = new \DateTime ( '@0' );
$dtT = new \DateTime ( "@$seconds" );
$ret = '';
if ($seconds === 0) {
// special case
return '0 seconds';
}
$diff = $dtF->diff ( $dtT );
foreach ( array (
'y' => 'year',
'm' => 'month',
'd' => 'day',
'h' => 'hour',
'i' => 'minute',
's' => 'second'
) as $time => $timename ) {
if ($diff->$time !== 0) {
$ret .= $diff->$time . ' ' . $timename;
if ($diff->$time !== 1 && $diff->$time !== -1 ) {
$ret .= 's';
}
$ret .= ' ';
}
}
return substr ( $ret, 0, - 1 );
}

- > string(16) "2 hours 1 second"

全部在一个解决方案。没有给出零的单位。将只生成您指定的单位数量(默认为3)。 定义是可选的,但在大型项目中可能会派上用场。

define('OneMonth', 2592000);
define('OneWeek', 604800);
define('OneDay', 86400);
define('OneHour', 3600);
define('OneMinute', 60);


function SecondsToTime($seconds, $num_units=3) {
$time_descr = array(
"months" => floor($seconds / OneMonth),
"weeks" => floor(($seconds%OneMonth) / OneWeek),
"days" => floor(($seconds%OneWeek) / OneDay),
"hours" => floor(($seconds%OneDay) / OneHour),
"mins" => floor(($seconds%OneHour) / OneMinute),
"secs" => floor($seconds%OneMinute),
);
        

$res = "";
$counter = 0;
    

foreach ($time_descr as $k => $v) {
if ($v) {
$res.=$v." ".$k;
$counter++;
if($counter>=$num_units)
break;
elseif($counter)
$res.=", ";
}
}
return $res;
}

最简单的方法是创建一个方法,该方法从 DateTime: : diff 返回当前时间 $的相对时间(以 $second 为单位) ,然后可以链接并格式化这个时间 $。例如:-

public function toDateInterval($seconds) {
return date_create('@' . (($now = time()) + $seconds))->diff(date_create('@' . $now));
}

现在将您的方法调用链接到 DateInterval: : format

echo $this->toDateInterval(1640467)->format('%a days %h hours %i minutes'));

结果:

18 days 23 hours 41 minutes

我写的间隔类可以用,也可以用相反的方式。

composer require lubos/cakephp-interval


$Interval = new \Interval\Interval\Interval();


// output 2w 6h
echo $Interval->toHuman((2 * 5 * 8 + 6) * 3600);


// output 36000
echo $Interval->toSeconds('1d 2h');

更多信息请看 https://github.com/LubosRemplik/CakePHP-Interval

根据 Julian Moreno 的答案,但是改为以字符串(而不是数组)的形式给出响应,只包含所需的时间间隔,而不假定为复数。

这个答案与得票最多的答案之间的区别在于:

For 259264 seconds, 这个密码 would give

3天1分4秒

对于 259264秒,最高票数答案(格拉维)将给出

3天,0小时,1分 还有4秒

function secondsToTime($inputSeconds) {
$secondsInAMinute = 60;
$secondsInAnHour = 60 * $secondsInAMinute;
$secondsInADay = 24 * $secondsInAnHour;


// Extract days
$days = floor($inputSeconds / $secondsInADay);


// Extract hours
$hourSeconds = $inputSeconds % $secondsInADay;
$hours = floor($hourSeconds / $secondsInAnHour);


// Extract minutes
$minuteSeconds = $hourSeconds % $secondsInAnHour;
$minutes = floor($minuteSeconds / $secondsInAMinute);


// Extract the remaining seconds
$remainingSeconds = $minuteSeconds % $secondsInAMinute;
$seconds = ceil($remainingSeconds);


// Format and return
$timeParts = [];
$sections = [
'day' => (int)$days,
'hour' => (int)$hours,
'minute' => (int)$minutes,
'second' => (int)$seconds,
];


foreach ($sections as $name => $value){
if ($value > 0){
$timeParts[] = $value. ' '.$name.($value == 1 ? '' : 's');
}
}


return implode(', ', $timeParts);
}

我希望这能帮到别人。

简短、简单、可靠:

function secondsToDHMS($seconds) {
$s = (int)$seconds;
return sprintf('%d:%02d:%02d:%02d', $s/86400, $s/3600%24, $s/60%60, $s%60);
}

Solution that should exclude 0 values and set correct singular/plural values

use DateInterval;
use DateTime;


class TimeIntervalFormatter
{


public static function fromSeconds($seconds)
{
$seconds = (int)$seconds;
$dateTime = new DateTime();
$dateTime->sub(new DateInterval("PT{$seconds}S"));
$interval = (new DateTime())->diff($dateTime);
$pieces = explode(' ', $interval->format('%y %m %d %h %i %s'));
$intervals = ['year', 'month', 'day', 'hour', 'minute', 'second'];
$result = [];
foreach ($pieces as $i => $value) {
if (!$value) {
continue;
}
$periodName = $intervals[$i];
if ($value > 1) {
$periodName .= 's';
}
$result[] = "{$value} {$periodName}";
}
return implode(', ', $result);
}
}
function convert($seconds){
$string = "";


$days = intval(intval($seconds) / (3600*24));
$hours = (intval($seconds) / 3600) % 24;
$minutes = (intval($seconds) / 60) % 60;
$seconds = (intval($seconds)) % 60;


if($days> 0){
$string .= "$days days ";
}
if($hours > 0){
$string .= "$hours hours ";
}
if($minutes > 0){
$string .= "$minutes minutes ";
}
if ($seconds > 0){
$string .= "$seconds seconds";
}


return $string;
}


echo convert(3744000);

日期间隔:

$d1 = new DateTime();
$d2 = new DateTime();
$d2->add(new DateInterval('PT'.$timespan.'S'));


$interval = $d2->diff($d1);
echo $interval->format('%a days, %h hours, %i minutes and %s seconds');


// Or
echo sprintf('%d days, %d hours, %d minutes and %d seconds',
$interval->days,
$interval->h,
$interval->i,
$interval->s
);


// $interval->y => years
// $interval->m => months
// $interval->d => days
// $interval->h => hours
// $interval->i => minutes
// $interval->s => seconds
// $interval->days => total number of days

这里有一些很好的答案,但没有一个能满足我的需要。我在 格拉维奇的回答的基础上添加了一些我需要的额外特性;

  • 不要打印零。所以“5分钟”而不是“0小时,5分钟”
  • 正确处理复数而不是默认使用复数形式。
  • 将输出限制在设定的单位数; 因此,“2个月,2天”而不是“2个月,2天,1小时,45分钟”

You can see a running version of the code here.

function secondsToHumanReadable(int $seconds, int $requiredParts = null)
{
$from     = new \DateTime('@0');
$to       = new \DateTime("@$seconds");
$interval = $from->diff($to);
$str      = '';


$parts = [
'y' => 'year',
'm' => 'month',
'd' => 'day',
'h' => 'hour',
'i' => 'minute',
's' => 'second',
];


$includedParts = 0;


foreach ($parts as $key => $text) {
if ($requiredParts && $includedParts >= $requiredParts) {
break;
}


$currentPart = $interval->{$key};


if (empty($currentPart)) {
continue;
}


if (!empty($str)) {
$str .= ', ';
}


$str .= sprintf('%d %s', $currentPart, $text);


if ($currentPart > 1) {
// handle plural
$str .= 's';
}


$includedParts++;
}


return $str;
}

我使用的这个解决方案(回到学习 PHP 的时候)没有任何 in 函数:

$days = (int)($uptime/86400); //1day = 86400seconds
$rdays = (uptime-($days*86400));
//seconds remaining after uptime was converted into days
$hours = (int)($rdays/3600);//1hour = 3600seconds,converting remaining seconds into hours
$rhours = ($rdays-($hours*3600));
//seconds remaining after $rdays was converted into hours
$minutes = (int)($rhours/60); // 1minute = 60seconds, converting remaining seconds into minutes
echo "$days:$hours:$minutes";

Though this was an old question, new learners who come across this, may find this answer useful.

foreach ($email as $temp => $value) {
$dat = strtotime($value['subscription_expiration']); //$value come from mysql database
//$email is an array from mysqli_query()
$date = strtotime(date('Y-m-d'));


$_SESSION['expiry'] = (((($dat - $date)/60)/60)/24)." Days Left";
//you will get the difference from current date in days.
}

$value come from Database $value 来自数据库。这个密码在 Codeigniter。$SESSION 用于存储用户订阅。这是强制性的。我在我的案子里用过,你想用什么都行。

a=int(input("Enter your number by seconds "))
d=a//(24*3600)   #Days
h=a//(60*60)%24  #hours
m=a//60%60       #minutes
s=a%60           #seconds
print("Days ",d,"hours ",h,"minutes ",m,"seconds ",s)

I don't know why some of these answers are ridiculously long or complex. Here's one using the 日期时间类别. Kind of similar to radzserg's answer. This will only display the units necessary, and negative times will have the 'ago' suffix...

function calctime($seconds = 0) {


$datetime1 = date_create("@0");
$datetime2 = date_create("@$seconds");
$interval = date_diff($datetime1, $datetime2);


if ( $interval->y >= 1 ) $thetime[] = pluralize( $interval->y, 'year' );
if ( $interval->m >= 1 ) $thetime[] = pluralize( $interval->m, 'month' );
if ( $interval->d >= 1 ) $thetime[] = pluralize( $interval->d, 'day' );
if ( $interval->h >= 1 ) $thetime[] = pluralize( $interval->h, 'hour' );
if ( $interval->i >= 1 ) $thetime[] = pluralize( $interval->i, 'minute' );
if ( $interval->s >= 1 ) $thetime[] = pluralize( $interval->s, 'second' );


return isset($thetime) ? implode(' ', $thetime) . ($interval->invert ? ' ago' : '') : NULL;
}


function pluralize($count, $text) {
return $count . ($count == 1 ? " $text" : " ${text}s");
}


// Examples:
//    -86400 = 1 day ago
//     12345 = 3 hours 25 minutes 45 seconds
// 987654321 = 31 years 3 months 18 days 4 hours 25 minutes 21 seconds

编辑: 如果你想简化上面的例子,使用更少的变量/空间(以牺牲易读性为代价) ,这里有一个替代版本可以做同样的事情:

function calctime($seconds = 0) {
$interval = date_diff(date_create("@0"),date_create("@$seconds"));


foreach (array('y'=>'year','m'=>'month','d'=>'day','h'=>'hour','i'=>'minute','s'=>'second') as $format=>$desc) {
if ($interval->$format >= 1) $thetime[] = $interval->$format . ($interval->$format == 1 ? " $desc" : " {$desc}s");
}


return isset($thetime) ? implode(' ', $thetime) . ($interval->invert ? ' ago' : '') : NULL;
}

我正在编辑其中一个代码,以便在出现负值时能很好地工作。当值为负时,floor()函数没有给出正确的计数。因此,在使用 floor()函数之前,我们需要使用 abs()函数。 $inputSeconds变量可以是当前时间戳和所需日期之间的差异。

/**
* Convert number of seconds into hours, minutes and seconds
* and return an array containing those values
*
* @param integer $inputSeconds Number of seconds to parse
* @return array
*/


function secondsToTime($inputSeconds) {


$secondsInAMinute = 60;
$secondsInAnHour  = 60 * $secondsInAMinute;
$secondsInADay    = 24 * $secondsInAnHour;


// extract days
$days = abs($inputSeconds / $secondsInADay);
$days = floor($days);


// extract hours
$hourSeconds = $inputSeconds % $secondsInADay;
$hours = abs($hourSeconds / $secondsInAnHour);
$hours = floor($hours);


// extract minutes
$minuteSeconds = $hourSeconds % $secondsInAnHour;
$minutes = abs($minuteSeconds / $secondsInAMinute);
$minutes = floor($minutes);


// extract the remaining seconds
$remainingSeconds = $minuteSeconds % $secondsInAMinute;
$seconds = abs($remainingSeconds);
$seconds = ceil($remainingSeconds);


// return the final array
$obj = array(
'd' => (int) $days,
'h' => (int) $hours,
'm' => (int) $minutes,
's' => (int) $seconds,
);
return $obj;
}

A variation on @Glavić's answer - this one hides leading zeros for shorter results and uses plurals in correct places. It also removes unnecessary precision (e.g. if the time difference is over 2 hours, you probably don't care how many minutes or seconds).

function secondsToTime($seconds)
{
$dtF = new \DateTime('@0');
$dtT = new \DateTime("@$seconds");
$dateInterval = $dtF->diff($dtT);
$days_t = 'day';
$hours_t = 'hour';
$minutes_t = 'minute';
$seconds_t = 'second';
if ((int)$dateInterval->d > 1) {
$days_t = 'days';
}
if ((int)$dateInterval->h > 1) {
$hours_t = 'hours';
}
if ((int)$dateInterval->i > 1) {
$minutes_t = 'minutes';
}
if ((int)$dateInterval->s > 1) {
$seconds_t = 'seconds';
}




if ((int)$dateInterval->d > 0) {
if ((int)$dateInterval->d > 1 || (int)$dateInterval->h === 0) {
return $dateInterval->format("%a $days_t");
} else {
return $dateInterval->format("%a $days_t, %h $hours_t");
}
} else if ((int)$dateInterval->h > 0) {
if ((int)$dateInterval->h > 1 || (int)$dateInterval->i === 0) {
return $dateInterval->format("%h $hours_t");
} else {
return $dateInterval->format("%h $hours_t, %i $minutes_t");
}
} else if ((int)$dateInterval->i > 0) {
if ((int)$dateInterval->i > 1 || (int)$dateInterval->s === 0) {
return $dateInterval->format("%i $minutes_t");
} else {
return $dateInterval->format("%i $minutes_t, %s $seconds_t");
}
} else {
return $dateInterval->format("%s $seconds_t");
}


}
php > echo secondsToTime(60);
1 minute
php > echo secondsToTime(61);
1 minute, 1 second
php > echo secondsToTime(120);
2 minutes
php > echo secondsToTime(121);
2 minutes
php > echo secondsToTime(2000);
33 minutes
php > echo secondsToTime(4000);
1 hour, 6 minutes
php > echo secondsToTime(4001);
1 hour, 6 minutes
php > echo secondsToTime(40001);
11 hours
php > echo secondsToTime(400000);
4 days

Laravel 的例子

700多个地点由 Carbon 提供支持

\Carbon\CarbonInterval::seconds(1640467)->cascade()->forHumans(); //2 weeks 4 days 23 hours 41 minutes 7 seconds

增加了一些格式修改从格拉维的伟大的答案 Facebook 风格时间的文章计数..。

        function secondsToTime($seconds) {
$dtF = new \DateTime('@0');
$dtT = new \DateTime("@$seconds");


switch($seconds){
case ($seconds<60*60*24): // if time is less than one day
return $dtF->diff($dtT)->format('%h hours, %i minutes, %s seconds');
break;
case ($seconds<60*60*24*31 && $seconds>60*60*24): // if time is between 1 day and 1 month
return $dtF->diff($dtT)->format('%d days, %h hours');
break;
case ($seconds<60*60*24*365 && $seconds>60*60*24*31): // if time between 1 month and 1 year
return $dtF->diff($dtT)->format('%m months, %d days');
break;
case ($seconds>60*60*24*365): // if time is longer than 1 year
return $dtF->diff($dtT)->format('%y years, %m months');
break;




}
function secondsToTime($seconds) {
$time = [];
$minutes = $seconds / 60;
$seconds = $seconds % 60;
$hours = $minutes / 60;
$minutes = $minutes % 60;
$days = $hours / 24;
$hours = $hours % 24;
$month = $days /30;
$days = $days % 30;
$year = $month / 12;
$month = $month % 12;
if ((int)($year) != 0){
array_push($time,[ "year" => (int)($year)]);
}
if ($month != 0){
array_push($time, ["months" => $month]);
}
if ($days != 0){
array_push($time,["days" => $days]);
}
if ($hours != 0){
array_push($time,["hours" => $hours]);
}
if ($minutes != 0){
array_push($time,["minutes" => $minutes]);
}
if ($seconds != 0){
array_push($time,["seconds" => $seconds]);
}
return $time;
}

更详细一点,跳过时间单位为零

function secondsToTime($ss)
{
$htmlOut="";
$s = $ss%60;
$m = floor(($ss%3600)/60);
$h = floor(($ss%86400)/3600);
$d = floor(($ss%2592000)/86400);
$M = floor($ss/2592000);
if ( $M > 0 )
{
$htmlOut.="$M months";
}
if ( $d > 0 )
{
if ( $M > 0 )
$htmlOut.=", ";
$htmlOut.="$d days";
}
if ( $h > 0 )
{
if ( $d > 0 )
$htmlOut.=", ";
$htmlOut.="$h hours";
}
if ( $m > 0 )
{
if ( $h > 0 )
$htmlOut.=", ";
$htmlOut.="$m minutes";
}
if ( $s > 0 )
{
if ( $m > 0 )
$htmlOut.=" and ";
$htmlOut.="$s seconds";
}
return $htmlOut;
}

我认为 会给你所有你想要的品种

因此,对于您的示例,您将添加以下代码

$seconds = 1640467;
$time = Carbon::now();
$humanTime = $time->diffForHumans($time->copy()->addSeconds($seconds), true, false, 4);

输出是这样的

2周4天23小时41分钟