PHP ceil返回一个浮点数

时间:2011-11-13 14:11:49

标签: php ceil

我创建了一个函数来返回两个日期之间的差异

<?php


class days {
    function dateDiff($start, $end) {
        $start_ts = strtotime($start);

        $end_ts = strtotime($end);

        $diff = $end_ts - $start_ts;

        $diff1 = ceil($diff / 86400);

        return $diff1;

    }
}

我在视图中有这个代码:

<?php
$a    = new days();
$days = $a->dateDiff($v[17], date('Y/m/d'));
if ($days < 30) {
    $ds = $days;
    $tm = 'days';
} else {
    if ($days < 365) {
        $ds = $days / 30;
        $tm = 'months';
    } else {
        $ds = $days / 365;
        $tm = 'years';
    }
}

$ v [17]是从数据库返回到视图的日期。

当我在2011年8月输入一篇文章时......它会显示:

2.9666666666667个月前

我问自己......这个Ceil方法怎么不能像它应该的那样返回一个int值?

如果这是正常的,那么解决方案是什么?

提前谢谢你:)

1 个答案:

答案 0 :(得分:3)

ceil功能在返回天数时效果很好。

但问题在于:

if ($days<365){
   $ds=$days/30;
   $tm='months';
}

这次你没有使用ceil!你应该试试$ds = ceil($days / 30);

之类的东西

年数相同。

使用round代替ceil可能会更精确,因此32天不会在2个月内翻译:

$days = $a->dateDiff('10 oct 2011',date('Y/m/d'));

if ($days < 30) {
    $ds = $days;
    $tm = 'day';
}
else {
    if ($days < 365){
        $ds = round($days / 30);
        $tm = 'month';
    }
    else {
        $ds = round($days / 365);
        $tm = 'year';
    }
}

if ($ds > 1) {
    $tm .= 's';
}

echo "$ds $tm"; # => 1 month; or 2 months using ceil function