我有 2 个 unix 时间,一个是今天的日期,另一个是到期时间。
- 今日时间:1377173245 (2013-08-22 12:07:25)
- 到期时间:1406303166(2014-07-25 15:46:06)
我想要实现的是计算列表过期的剩余时间。在当前情况下,它应该显示,11 months -- hours -- minutes -- seconds
我没有找到任何好的解决方案来计算差异。我怀疑是否可以使用 UNIX 时间系统计算时差?
谢谢 :-)
我有 2 个 unix 时间,一个是今天的日期,另一个是到期时间。
我想要实现的是计算列表过期的剩余时间。在当前情况下,它应该显示,11 months -- hours -- minutes -- seconds
我没有找到任何好的解决方案来计算差异。我怀疑是否可以使用 UNIX 时间系统计算时差?
谢谢 :-)
这就是您要查找的内容:DateTime::diff
首先创建具有第一个日期的对象:
$date = new DateTime('2013-08-22 12:07:25');
然后使用 diff 方法:
$diff = $date->diff(new DateTime('2014-07-25 15:46:06'));
现在,如果您打印 $diff 变量,您将看到包含小时、分钟、天等值的数组。
采用DateTime::diff
尝试使用datetime::diff。这是 php.net 文档中的示例:
<?php
$datetime1 = date_create('2009-10-11');
$datetime2 = date_create('2009-10-13');
$interval = date_diff($datetime1, $datetime2);
echo $interval->format('%R%a days');
?>
使用时间戳创建DateTime
对象很容易。但是,此解决方案需要 PHP 5.3+。
使用DateTime
类:
例子:
$datetime1 = new DateTime();
$datetime2 = new DateTime('2014-07-25 15:46:06');
$interval = $datetime1->diff($datetime2);
echo $interval->format('%M months, %H hours, %I minutes, and %S seconds remaining ');
输出:
11 months, 21 hours, 44 minutes, and 20 seconds remaining
这绝对是可能的。但是,你会遇到几个月的问题,因为每个月的天数不同,所以我将在下面只做天、小时、分钟和秒。
$days=($expiration-$today)/(60*60*24);
$hours=(($expiration-$today)/(60*60))%24; //the modulus operator, gets a remainder
$minutes=(($expiration-$today)/(60))%(60*60);
$seconds=($expiration-$today)/60;
如果你需要几个月,你会发现它更容易使用date_diff()
。