1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
closestworkdate.php
См. документацию.
1<?php
2
3declare(strict_types=1);
4
6
10use Bitrix\Socialnetwork\Integration\Calendar\ClosestWorkDate\Trait\ClosestWorkDateTrait;
11
13{
14 use ClosestWorkDateTrait;
15
16 private ScheduleInterface $schedule;
17 private const SECONDS_PER_DAY = 60 * 60 * 24;
18
19 public function __construct(?ScheduleInterface $schedule = null)
20 {
21 $this->schedule = $schedule ?? new PortalSchedule();
22 }
23
27 public function get(int $offsetInSeconds, ?DateTime $userTimeDate = null): DateTime
28 {
29 $userTimeDate = $userTimeDate ?? (new DateTime())->toUserTime();
30
31 $possibleDate = clone $userTimeDate;
32 $possibleDate = $possibleDate->disableUserTime();
33
34 if ($offsetInSeconds <= 0)
35 {
36 return $possibleDate;
37 }
38
39 while ($offsetInSeconds >= self::SECONDS_PER_DAY)
40 {
41 $possibleDate->add('1 day');
42 $possibleDate = $this->getClosestWorkDate($possibleDate);
43
44 $offsetInSeconds -= self::SECONDS_PER_DAY;
45 }
46
47 $possibleDate->add($offsetInSeconds . ' seconds');
48
49 return $this->getClosestWorkDate($possibleDate);
50 }
51}