У меня есть два поля с форматами datetime в Symfony 2. Теперь я хочу получить общее количество часов после отправки формы
entity.php
private $timein;
private $timeout;
public function setTimein($timein)
{
......
public function getWorkHour()
{
$hour1 = 0; $hour2 = 0;
$date1 = $this->timein;
$date2 = $this->timeout;
$datetimeObj1 = new \DateTime($date1);
$datetimeObj2 = new \DateTime($date2);
$interval = $datetimeObj1->diff($datetimeObj2);
if($interval->format('%a') > 0){
$hour1 = $interval->format('%a')*24;
}
if($interval->format('%h') > 0){
$hour2 = $interval->format('%h');
}
$hour = ($hour1 + $hour2) . " hours.";
return $hour;
}
show.html
<th>No of Hour</th>
<td>{{ entity.getWorkHour() }}</td>
Это вызовет ошибку
Во время рендеринга шаблона было выбрано исключение ("DateTime :: __ construct() ожидает, что параметр 1 является строкой, объект указан") в...
Как бы вы просто получили количество часов между двумя часами в тот же день?
Вы можете сделать это
$currentDate = new \DateTime();
$lastDate = new \DateTime(); // your own date
$diff = $currentDate->diff($lastDate);
$hours = $diff->h;
$hours = $hours + ($diff->days * 24);
echo $hours;
Вы должны написать свое собственное расширение ветки:
Вы должны написать функцию twig, как описано здесь, со следующим кодом для make diff через php-функцию:
$calcFrom = $from;
$calcTo = $to;
$diff = $now->diff($calcFrom);
$workHours = $diff->days * 24 + (int)$diff->format('%H');
И сделайте его доступным через расширение Twig. Смотрите здесь также.
Если вы используете рамки symfony2, вы можете использовать KnpTimeBundle
В Twig: Это сравнение с текущей датой:
{# Returns something like "3 minutes ago" #}
{{ time_diff(form) }}
Это сопоставимо с другой датой:
{# Returns something like "3 minutes ago" #}
{{ time_diff(form , to ) }}
Надеюсь, что эта помощь
Ваша ошибка означает, что $this->timein
или $this->timeout
не являются строками, поэтому сбрасывайте их и проверяйте свой код (кто их установил и т.д.).
Что касается разницы между датами, вам необходимо:
конвертировать их в метки времени
получить разницу между ними и преобразовать ее в часы.
$interval = $this->timeout->diff($this->timein)