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

PHP DateTime对象的diff()方法导致浮点变量出现问题,php,datetime,floating-point,Php,Datetime,Floating Point,PHPV5.3.5 我遇到了一个问题,DateTime->diff似乎在处理类型为float的变量,这与它无关。很明显,我不了解PHP OOP或变量引用中对象的工作方式。这是代码,然后我将解释输出和奇怪之处 $interval_in_seconds = $settings['interval'] * 86400; $checkin_in_seconds = floor($checkin['timestamp'] / 1000); $next_checkin = $checkin_in_secon

PHPV5.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']或我正在拉入进行全局调试的任何其他变量都会为第一个var_转储显示正确的值,但为$dtF->diff$dtT之后的第二个变量显示一个随机字符

通常该字符是<或~,但我也得到了0或一个ascii交叉。我认为这取决于我正在转储的变量

$settings['interval'的输出示例

从该函数返回的值是正确的,并且可以正常工作,但是,我的另一个变量被带入了一条黑暗的小巷并被殴打。我不明白为什么。这些变量都没有被操作,似乎没有任何东西是通过引用传递的,甚至在我使用全局变量之前也是这样


这是怎么回事

我真的不知道,但是试试这个,看看会发生什么:$checkin_in_seconds=floorfloat$checkin['timestamp']/1000;-这里的结果是错误的吗?为什么从PHP中获取部分日期的JavaScript字符串?如果需要客户端时间,请使用JavaScript。如果您希望服务器时间使用PHP。@zerkms,它看起来工作正常,但是在我的本地服务器上,它不能可靠地重复。除了添加缺少的变量值之外,你还做了什么修改吗?@Philip:我复制了你的代码。你可以在要求之前自己检查一下。正如我们所发现的,它是本地化到您的机器上的——您可以花一两分钟的时间来本地化一个行为不同的精确表达式。
float(12) float(<)