如何使用PHP和Zend Framework计算某个日期的“时间”?

时间:2010-03-11 18:49:35

标签: php zend-framework date

我有两个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';

1 个答案:

答案 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()方法返回接收者和参数日期之间的毫秒差异