Итак, ваша проблема заключалась в использовании объекта dateinterval для получения разницы во времени. Но к ним вы просто добавляете часы и минуты, но это «база 60» (как 60 минут за 1 час), поэтому вы не можете сложить их с +
.
Пример : 1 час 15 минут (1.15
) плюс 1 час 45 минут (1.45
) - это 2.6
численно, но 3 часа (по данным вашего комментария).
Чтобы решить эту проблему, вам нужно преобразовать в числовое значение. Вы можете использовать следующую функцию:
function convertToDecimal($hours) {
$parts = explode('.', (string)$hours);
$min = (count($parts) == 2) ? $parts[1] / 60 : 0;
return $parts[0] + $min;
}
при вызове convertToDecimal(1.15)
вернет 1.25
. добавьте, что вы уменьшаете функцию следующим образом:
carry[$item["recruiter"]] += convertToDecimal($item["hours"]);
Подсказка - правильно задать вопрос - непростая задача - теперь, когда у вас есть решение, попробуйте отредактировать свой вопрос, чтобы он включал все (и только ]) данные, необходимые для понимания вашей проблемы и ее воспроизведения.
Лучшее решение включает изменение способа извлечения разницы во времени. Рассмотрим следующий метод:
$shiftStartTime = "2019-01-11T07:00:00";
$shiftEndTime = "2019-01-11T15:15:00";
$startLong = (new DateTime($shiftStartTime))->getTimestamp();
$endLong = (new DateTime($shiftEndTime))->getTimestamp();;
echo ($endLong - $startLong) / (60 * 60);
Это даст вам 8.25
при подсчете секунды и без установки часов с помощью DateInterval.
Надеюсь, это поможет!
Я полагаю, что Вы не можете на самом деле переопределить переменные в Java. Подкласс на самом деле 'скрывает' переменную var
.
Когда Вы бросаете к Automobile
, Вы получаете версию суперкласса var
переменная. Однако toString()
метод все еще смотрит на версию экземпляра var
переменная.
Если Вы удалили public int var
от подкласса Porsche это должно работать как ожидалось.
Нужно отметить, что это не хорошая практика для использования общедоступных переменных экземпляра, необходимо всегда создавать методы считывания / методы set, чтобы иметь надлежащую инкапсуляцию.
Затенение переменной var
.
Ваш Porche.var
другая переменная, чем Automobile.var
.
Porsche.toString()
метод использует Porsche.var
, тогда как состав исполнителей говорит компилятору использовать Automobile
версия.
Доступ к полям не является полиморфным - он зависит только от типа времени компиляции выражения.
Выражение ((Автомобиль) p) имеет время компиляции, вводит Автомобиль, таким образом, его поля используются.