Получить количество часов между двумя datetime в symfony2

1

У меня есть два поля с форматами 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 является строкой, объект указан") в...

Как бы вы просто получили количество часов между двумя часами в тот же день?

  • 0
    просто попробуйте $interval = $this->timeout->diff($this->timein)
Теги:

3 ответа

0

Вы можете сделать это

    $currentDate = new \DateTime();
    $lastDate = new \DateTime(); // your own date
    $diff = $currentDate->diff($lastDate);
    $hours = $diff->h;
    $hours = $hours + ($diff->days * 24);
    echo $hours;
0

Вы должны написать свое собственное расширение ветки:

Вы должны написать функцию 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 ) }}

Надеюсь, что эта помощь

0

Ваша ошибка означает, что $this->timein или $this->timeout не являются строками, поэтому сбрасывайте их и проверяйте свой код (кто их установил и т.д.).

Что касается разницы между датами, вам необходимо:

  • конвертировать их в метки времени

  • получить разницу между ними и преобразовать ее в часы.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню