获取symfony2中两个日期时间之间的小时数

时间:2016-01-15 06:56:04

标签: php symfony

我在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为字符串,对象给定”)...

您如何在同一天的两个小时之间获得小时数?

3 个答案:

答案 0 :(得分:0)

您的错误意味着$this->timein$this->timeout不是字符串,因此请转储它们并检查您的代码(设置它们的人等)。

至于日期之间的差异,您需要:

  • 将它们转换为时间戳

  • 获取它们之间的差异并将其转换为数小时。

答案 1 :(得分:0)

您必须编写自定义树枝扩展名

您必须使用以下代码编写一个twig函数,如here所述,通过php函数进行make diff:

$calcFrom = $from;

$calcTo = $to;
$diff = $now->diff($calcFrom);
$workHours = $diff->days * 24 + (int)$diff->format('%H');

并通过Twig extension提供。另见here

如果您使用的是symfony2框架您可以使用KnpTimeBundle

在树枝上: 这与当前日期进行比较:

{# Returns something like "3 minutes ago" #}
{{ time_diff(form) }}

这与另一个日期比较:

{# Returns something like "3 minutes ago" #}
{{ time_diff(form , to ) }}

希望这个帮助

答案 2 :(得分:0)

您可以这样做

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