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(<)
这里发生了什么?