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
будет отображать правильное значение для первого var_dump()
но случайный символ для второго после $dtF->diff($dtT)
Обычно этот персонаж < или ~, но я также получил 0 или один из крестов Асии. Я думаю, что это зависит от того, какую переменную я сбрасываю.
Пример вывода для $settings['interval']
float(12) float(<)
Значение, возвращаемое из этой функции, является правильным и работает как исключение, однако, одна из моих других переменных попадает в темный переулок и избивается. Я не могу понять, почему. Ни одной из этих переменных не манипулируют, ничего (кажется) не передается по ссылке, и это имело место даже до того, как я использовал global
Что тут происходит?
Задача ещё не решена.
Других решений пока нет …