如何正确计算php日期时间的剩余时间

如何正确计算php日期时间的剩余时间,php,Php,到期日期以unix时间戳表示,约为2020年9月30日上午6点 $expiry_date_time = 160142766; //30 sept 2020 6AM $dt1 = new DateTime(); $dt1->setTimestamp($expiry_date_time); $now = new DateTime(); $i = $now->diff($dt1); $time_remaining = $i->format('%y years %m months %a

到期日期以unix时间戳表示,约为2020年9月30日上午6点

$expiry_date_time = 160142766; //30 sept 2020 6AM
$dt1 = new DateTime();
$dt1->setTimestamp($expiry_date_time);
$now = new DateTime();
$i = $now->diff($dt1);
$time_remaining = $i->format('%y years %m months %a days %h hours %i minutes');
echo $time_remaining;
今天运行代码时的输出(2020年10月11日)

此代码不会给出不正确的结果,但它无法区分过期和未过期,就像上面的订阅已过期一样,它给出的输出为11天,这并非完全不正确,因为如果您计算,它已过期11天,但不应该为负11天吗? 如果我将到期日设置为未来两天,它将正确计算并输出2天、xx小时和xx分钟。 如何区分过期和未过期?

$expiration\u date\u time=160142766//2020年9月30日上午6点
$dt1=新的日期时间();
$dt1->setTimestamp($expiration\u date\u time);
$now=新日期时间();
$i=$now->diff($dt1);
$time_剩余=$i->格式(“%y年%m月%a天%h小时%i分钟”);
如果($expiration\u date\u time-$now()->getTimestamp()<0){
$time\u remaining=“过期$time\u remaining ago”;
}
回声$time_剩余;

这将在过去的文本中添加一些文本,以确保您知道它是否已过期。

DateInterval
有一个用于此目的的标志:

invert

如果间隔表示负时间段,则为1,否则为0


您可以比较
过期日期时间
当前日期时间
来检查它是否过期
0 years 0 months 11 days 7 hours 19 minutes
$expiry_date_time = 160142766; //30 sept 2020 6AM
$dt1 = new DateTime();
$dt1->setTimestamp($expiry_date_time);
$now = new DateTime();

// What you're doing right now
$i = $now->diff($dt1);
var_dump($i->invert);  // int(1)

// If you're doing it the other way around
$i = $dt1->diff($now);
var_dump($i->invert);  // int(0)