PHP DateTime对象的diff()方法导致浮点变量出现问题

时间:2014-10-21 23:07:49

标签: php datetime floating-point

PHP v 5.3.5

我遇到了一个问题,其中DateTime-> diff似乎正在乱用变量(类型为float),它没有触及任何业务。我显然不理解对象的某些方式(一般来说是PHP OOP新手)或变量引用。这是代码,然后我将解释输出和什么是奇怪的。

$interval_in_seconds = $settings['interval'] * 86400;
$checkin_in_seconds = floor($checkin['timestamp'] / 1000);
$next_checkin = $checkin_in_seconds + $interval_in_seconds;
$until_next = $next_checkin - time();

if($until_next > 0) {
    $days = floor($until_next / 86400);

    function secondsToTime($seconds) {
        // Only here for var_dump testing:
        global $settings, $interval_in_seconds, $until_next, $next_checkin;

        $dtF = new DateTime("@0");
        $dtT = new DateTime("@$seconds");

var_dump($until_next);
        $return = $dtF->diff($dtT)->format('%h hours, %i minutes and %s seconds');
var_dump($until_next);

        return $return;
    }
    $countdown = $days . ' days, ' . secondsToTime($until_next);
}

$settings['interval']等于12并且是浮点数。 $checkin['timestamp']是1413926734544和一个字符串(来自JS,因此是毫秒)

大部分时间,但不是全部,$ settings ['interval']或我用global进行调试的任何其他变量都将显示第一个{{1}的正确值但 var_dump()

之后的第二个的随机字符

通常该字符是<或〜,但我也得到了0或其中一个ascii十字架。我认为这取决于我倾销的变量。

$dtF->diff($dtT)

的输出示例
$settings['interval']

从该函数返回的值是正确的,并且作为例外工作,但是,我的其他变量之一被带入黑暗的小巷并被殴打。我无法弄清楚为什么。这些变量都没有被操纵,没有(似乎)通过引用传递,甚至在我使用float(12) float(<)

之前就是这种情况

这里发生了什么?

0 个答案:

没有答案