Рассчитать рабочее время конкретного месяца каждого сотрудника - PullRequest
0 голосов
/ 09 июня 2018

Я использую symfony3, у меня есть объект с именем Presence для регистрации времени входа и выхода каждого сотрудника.Регистрация работает хорошо, но я хотел бы рассчитать общее количество рабочих часов конкретного месяца.

Фактически, я использую этот метод для расчета общего количества рабочих часов в день:

 public function hoursByDay()
 {
    $interval1 = $this->entryTimeFirstHalf->diff($this->entryTimeFirstHalfr);
    $interval2 = $this->entryTimeSecondHalf->diff($this->outTimeSecondHalf);

    $e = new \DateTime('00:00');
    $f = clone $e;

    $e->add($interval1);
    $e->add($interval2);

    return $f->diff($e)->format("%H:%I");
}

Но я не смог подсчитать общее количество рабочих часов по месяцам.

/**
* Presence
*
* @ORM\Table(name="presence")
* @ORM\Entity(repositoryClass="AppBundle\Repository\PresenceRepository")
*/
class Presence
{
/**
 * @var int
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @var \DateTime
 *
 * @ORM\Column(name="date_presence", type="date")
 */
private $date;

/**
 * @var \DateTime
 *
 * @ORM\Column(name="entry_time_first_half", type="time")
 */
private $entryTimeFirstHalf;

/**
 * @var \DateTime
 *
 * @ORM\Column(name="out_time_first_half", type="time")
 */
private $outTimeFirstHalf;

/**
 * @var \DateTime
 *
 * @ORM\Column(name="entry_time_second_half", type="time")
 */
private $entryTimeSecondHalf;

/**
 * @var \DateTime
 *
 * @ORM\Column(name="out_time_second_half", type="time")
 */
private $outTimeSecondHalf;

/**
 * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Employee")
 * @ORM\JoinColumn(nullable=false, onDelete="CASCADE")
 */
private $employee;

1 Ответ

0 голосов
/ 09 июня 2018

Попробуйте этот SQL:

SELECT `employee_id`, SUM( TIMESTAMPDIFF( HOUR, `entry_time_first_half`, `out_time_second_half` )) 
FROM `presence`
WHERE MONTH(`date`) = 7 AND YEAR(`date`) = 2018
GROUP BY `employee`
...