我有两个Zend Date对象可供使用:
$now = Zend_Date::now();
$sessionStart = new Zend_Date('2010-04-01 10:00:00', 'yyyy-MM-dd HH:mm:ss');
我需要计算剩余时间并以人类可读的方式显示。
The session will begin in 7 days.
The session will begin in 30 minutes.
我如何使用PHP和Zend Framework做到这一点?
这就是我想出的。如果您有更好的解决方案,请发布。
$remainingSeconds = $sessionStart->getTimestamp() - $now->getTimestamp();
// or: $remainingSeconds = $sessionStart->sub($now);
$remainingMinutes = $remainingSeconds / 60;
if ($remainingMinutes < 0) {
//session is in the past
return '0 days';
}
if (floor($remainingMinutes) <= 1) {
return '1 minute';
}
if (floor($remainingMinutes) < 60) {
return floor($remainingMinutes) . ' minutes';
}
$remainingHours = $remainingMinutes / 60;
if (floor($remainingHours) <= 1) {
return '1 hours';
}
if (floor($remainingHours) < 24) {
return floor($remainingHours) . ' hours';
}
$remainingDays = $remainingHours / 24;
if (floor($remainingDays) <= 1) {
return '1 day';
}
return floor($remainingDays) . ' days';
答案 0 :(得分:0)
documentation描述了这个非常好:
方法add(),sub(),compare(),get()和set()在日期上一般运行。在每种情况下,操作都在实例对象中保存的日期执行。除了get()之外,所有这些方法都需要$ date操作数,并且可以是Zend_Date实例对象,数字字符串或整数。
所以:
$sessionStart->sub($now);
应该这样做。
this section中描述了如何自定义输出。
<强>更新强>
以下是我在internet上找到的示例:
$jan1 = new Zend_Date('1.12.2009', Zend_Date::DATES);
echo "\nJanuary first: ", $jan1->toString();
$christmas = new Zend_Date('25.12.2009', Zend_Date::DATES);
echo "\nChristmas is on: ", $christmas->toString();
$diff = $christmas->sub($jan1);
echo "\nNumber of days: ", $diff / 60 / 60 / 24;
在此网站上,评论还指出:
sub()方法返回接收者和参数日期之间的毫秒差异