1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
DateLib.php
См. документацию.
1<?php
2
3namespace Bitrix\Bizproc\Calc\Libs;
4
5use Bitrix\Main;
6use Bitrix\Bizproc;
7use Bitrix\Bizproc\Calc\Arguments;
8use Bitrix\Main\Localization\Loc;
9
10class DateLib extends BaseLib
11{
12 private static $weekHolidays;
13 private static $yearHolidays;
14 private static $startWorkDay;
15 private static $endWorkDay;
16 private static $yearWorkdays;
17
18 private const ONE_HOUR = 3600;
19 private const TWELVE_HOURS = 12 * self::ONE_HOUR;
20
21 function getFunctions(): array
22 {
23 return [
24 'date' => [
25 'args' => true,
26 'func' => 'callDate',
27 'description' => Loc::getMessage('BIZPROC_CALC_FUNCTION_DATE_DESCRIPTION'),
28 ],
29 'dateadd' => [
30 'args' => true,
31 'func' => 'callDateAdd',
32 'description' => Loc::getMessage('BIZPROC_CALC_FUNCTION_DATEADD_DESCRIPTION'),
33 ],
34 'datediff' => [
35 'args' => true,
36 'func' => 'callDateDiff',
37 'description' => Loc::getMessage('BIZPROC_CALC_FUNCTION_DATEDIFF_DESCRIPTION'),
38 ],
39 'addworkdays' => [
40 'args' => true,
41 'func' => 'callAddWorkDays',
42 'description' => Loc::getMessage('BIZPROC_CALC_FUNCTION_ADDWORKDAYS_DESCRIPTION'),
43 ],
44 'workdateadd' => [
45 'args' => true,
46 'func' => 'callWorkDateAdd',
47 'description' => Loc::getMessage('BIZPROC_CALC_FUNCTION_WORKDATEADD_DESCRIPTION'),
48 ],
49 'isworkday' => [
50 'args' => true,
51 'func' => 'callIsWorkDay',
52 'description' => Loc::getMessage('BIZPROC_CALC_FUNCTION_ISWORKDAY_DESCRIPTION'),
53 ],
54 'isworktime' => [
55 'args' => true,
56 'func' => 'callIsWorkTime',
57 'description' => Loc::getMessage('BIZPROC_CALC_FUNCTION_ISWORKTIME_DESCRIPTION'),
58 ],
59 'touserdate' => [
60 'args' => true,
61 'func' => 'callToUserDate',
62 'description' => Loc::getMessage('BIZPROC_CALC_FUNCTION_TOUSERDATE_DESCRIPTION'),
63 ],
64 'getuserdateoffset' => [
65 'args' => true,
66 'func' => 'callGetUserDateOffset',
67 'description' => Loc::getMessage('BIZPROC_CALC_FUNCTION_GETUSERDATEOFFSET_DESCRIPTION'),
68 ],
69 'strtotime' => [
70 'args' => true,
71 'func' => 'callStrtotime',
72 'description' => Loc::getMessage('BIZPROC_CALC_FUNCTION_STRTOTIME_DESCRIPTION'),
73 ],
74 'locdate' => [
75 'args' => true,
76 'func' => 'callLocDate',
77 'description' => Loc::getMessage('BIZPROC_CALC_FUNCTION_LOCDATE_DESCRIPTION'),
78 ],
79 'settime' => [
80 'args' => true,
81 'func' => 'callSetTime',
82 'description' => Loc::getMessage('BIZPROC_CALC_FUNCTION_SETTIME_DESCRIPTION'),
83 ],
84 ];
85 }
86
87 public function callDateAdd(Arguments $args)
88 {
89 $date = $args->getFirstSingle();
90 $offset = $this->getDateTimeOffset($date);
91 $date = $this->makeTimestamp($date);
92 $interval = $args->getSecondSingle();
93
94 if ($date === false || ($interval && !is_scalar($interval)))
95 {
96 return null;
97 }
98
99 if (empty($interval))
100 {
101 return $date; // new Bizproc\BaseType\Value\DateTime($date, $offset);
102 }
103
104 // 1Y2M3D4H5I6S, -4 days 5 hours, 1month, 5h
105
106 $interval = trim($interval);
107 $bMinus = false;
108 if (mb_substr($interval, 0, 1) === "-")
109 {
110 $interval = mb_substr($interval, 1);
111 $bMinus = true;
112 }
113
114 static $arMap = [
115 "y" => "YYYY",
116 "year" => "YYYY",
117 "years" => "YYYY",
118 "m" => "MM",
119 "month" => "MM",
120 "months" => "MM",
121 "d" => "DD",
122 "day" => "DD",
123 "days" => "DD",
124 "h" => "HH",
125 "hour" => "HH",
126 "hours" => "HH",
127 "i" => "MI",
128 "min" => "MI",
129 "minute" => "MI",
130 "minutes" => "MI",
131 "s" => "SS",
132 "sec" => "SS",
133 "second" => "SS",
134 "seconds" => "SS",
135 ];
136
137 $arInterval = [];
138 while (preg_match('/\s*([\d]+)\s*([a-z]+)\s*/i', $interval, $match))
139 {
140 $match2 = mb_strtolower($match[2]);
141 if (array_key_exists($match2, $arMap))
142 {
143 $arInterval[$arMap[$match2]] = ($bMinus ? -intval($match[1]) : intval($match[1]));
144 }
145
146 $p = mb_strpos($interval, $match[0]);
147 $interval = mb_substr($interval, $p + mb_strlen($match[0]));
148 }
149
150 $date += $offset; // to server
151
152 $newDate = AddToTimeStamp($arInterval, $date);
153
154 $newDate -= $offset; // to user timezone
155
156 return new Bizproc\BaseType\Value\DateTime($newDate, $offset);
157 }
158
159 public function callWorkDateAdd(Arguments $args)
160 {
161 $date = $args->getFirstSingle();
162 $offset = $this->getDateTimeOffset($date);
163 $paramInterval = $args->getSecondSingle();
164 $user = $args->getThird();
165
166 if ($user)
167 {
168 $userArgs = clone $args;
169 $userArgs->setArgs([$user, $date]);
170
171 $date = $this->callToUserDate($userArgs);
172 $offset = $this->getDateTimeOffset($date);
173 }
174
175 $date = $this->makeTimestamp($date, true);
176
177 if ($date === false || ($paramInterval && !is_scalar($paramInterval)))
178 {
179 return null;
180 }
181
182 if (empty($paramInterval) || !Main\Loader::includeModule('calendar'))
183 {
184 return $date;
185 }
186
187 $paramInterval = trim($paramInterval);
188 $multiplier = 1;
189 if (mb_substr($paramInterval, 0, 1) === "-")
190 {
191 $paramInterval = mb_substr($paramInterval, 1);
192 $multiplier = -1;
193 }
194
195 $workDayInterval = $this->getWorkDayInterval();
196 $intervalMap = [
197 "d" => $workDayInterval,
198 "day" => $workDayInterval,
199 "days" => $workDayInterval,
200 "h" => 3600,
201 "hour" => 3600,
202 "hours" => 3600,
203 "i" => 60,
204 "min" => 60,
205 "minute" => 60,
206 "minutes" => 60,
207 ];
208
209 $interval = 0;
210 while (preg_match('/\s*([\d]+)\s*([a-z]+)\s*/i', $paramInterval, $match))
211 {
212 $match2 = mb_strtolower($match[2]);
213 if (array_key_exists($match2, $intervalMap))
214 {
215 $interval += intval($match[1]) * $intervalMap[$match2];
216 }
217
218 $p = mb_strpos($paramInterval, $match[0]);
219 $paramInterval = mb_substr($paramInterval, $p + mb_strlen($match[0]));
220 }
221
222 if (date('H:i:s', $date) === '00:00:00')
223 {
224 //add start work day seconds
225 $date += $this->getCalendarWorkTime()[0];
226 }
227
228 $date = $this->getNearestWorkTime($date, $multiplier);
229 if ($interval)
230 {
231 $days = (int)floor($interval / $workDayInterval);
232 $hours = $interval % $workDayInterval;
233
234 $remainTimestamp = $this->getWorkDayRemainTimestamp($date, $multiplier);
235
236 if ($days)
237 {
238 $date = $this->addWorkDay($date, $days * $multiplier);
239 }
240
241 if ($hours > $remainTimestamp)
242 {
243 $date += $multiplier < 0 ? -$remainTimestamp - 60 : $remainTimestamp + 60;
244 $date = $this->getNearestWorkTime($date, $multiplier) + (($hours - $remainTimestamp) * $multiplier);
245 }
246 else
247 {
248 $date += $multiplier * $hours;
249 }
250 }
251
252 $date -= $offset;
253
254 return new Bizproc\BaseType\Value\DateTime($date, $offset);
255 }
256
257 public function callAddWorkDays(Arguments $args)
258 {
259 $date = $args->getFirstSingle();
260 $offset = $this->getDateTimeOffset($date);
261 $days = (int)$args->getSecond();
262
263 if (($date = $this->makeTimestamp($date)) === false)
264 {
265 return null;
266 }
267
268 if ($days === 0 || !Main\Loader::includeModule('calendar'))
269 {
270 return $date;
271 }
272
273 $date = $this->addWorkDay($date, $days);
274
275 return new Bizproc\BaseType\Value\DateTime($date, $offset);
276 }
277
278 public function callIsWorkDay(Arguments $args)
279 {
280 if (!Main\Loader::includeModule('calendar'))
281 {
282 return false;
283 }
284
285 $date = $args->getFirstSingle();
286 $user = $args->getSecond();
287
288 if ($user)
289 {
290 $userArgs = clone $args;
291 $userArgs->setArgs([$user, $date]);
292
293 $date = $this->callToUserDate($userArgs);
294 }
295
296 if (($date = $this->makeTimestamp($date, true)) === false)
297 {
298 return false;
299 }
300
301 return !$this->isHoliday($date);
302 }
303
304 public function callIsWorkTime(Arguments $args)
305 {
306 if (!Main\Loader::includeModule('calendar'))
307 {
308 return false;
309 }
310
311 $date = $args->getFirstSingle();
312 $user = $args->getSecond();
313
314 if ($user)
315 {
316 $userArgs = clone $args;
317 $userArgs->setArgs([$user, $date]);
318
319 $date = $this->callToUserDate($userArgs);
320 }
321
322 if (($date = $this->makeTimestamp($date, true)) === false)
323 {
324 return false;
325 }
326
327 return !$this->isHoliday($date) && $this->isWorkTime($date);
328 }
329
330 public function callDateDiff(Arguments $args)
331 {
332 $date1 = $args->getFirstSingle();
333 $date2 = $args->getSecondSingle();
334 $format = $args->getThird();
335
336 if (!$date1 || !$date2 || !is_scalar($format))
337 {
338 return null;
339 }
340
341 $date1Formatted = $this->getDateTimeObject($date1);
342 $date2Formatted = $this->getDateTimeObject($date2);
343
344 if ($date1Formatted === false || $date2Formatted === false)
345 {
346 return null;
347 }
348
349 $interval = $date1Formatted->diff($date2Formatted);
350
351 return $interval === false ? null : $interval->format($format);
352 }
353
354 public function callDate(Arguments $args)
355 {
356 $format = $args->getFirst();
357 $date = $args->getSecondSingle();
358
359 if (!$format || !is_string($format))
360 {
361 return null;
362 }
363
364 $ts = $date ? $this->makeTimestamp($date, true) : time();
365
366 if (!$ts)
367 {
368 return null;
369 }
370
371 return date($format, $ts);
372 }
373
374 public function callToUserDate(Arguments $args)
375 {
376 $user = $args->getFirst();
377 $date = $args->getSecondSingle();
378
379 if (!$user)
380 {
381 return null;
382 }
383
384 if (!$date)
385 {
386 $date = time();
387 }
388 elseif (($date = $this->makeTimestamp($date)) === false)
389 {
390 return null;
391 }
392
393 $userId = \CBPHelper::extractFirstUser($user, $args->getParser()->getActivity()->getDocumentId());
394 $offset = $userId ? \CTimeZone::GetOffset($userId, true) : 0;
395
396 return new Bizproc\BaseType\Value\DateTime($date, $offset);
397 }
398
399 public function callGetUserDateOffset(Arguments $args)
400 {
401 $user = $args->getFirst();
402
403 if (!$user)
404 {
405 return null;
406 }
407
408 $userId = \CBPHelper::extractFirstUser($user, $args->getParser()->getActivity()->getDocumentId());
409
410 if (!$userId)
411 {
412 return 0;
413 }
414
415 return \CTimeZone::GetOffset($userId, true);
416 }
417
418 public function callStrtotime(Arguments $args)
419 {
420 $datetime = $args->getFirstSingle();
421 $baseDate = $args->getSecondSingle();
422
423 $baseTimestamp = $baseDate ? $this->makeTimestamp($baseDate, true) : time();
424
425 if (!$baseTimestamp || !is_scalar($datetime))
426 {
427 return null;
428 }
429
430 $timestamp = strtotime($datetime, (int)$baseTimestamp);
431
432 if ($timestamp === false)
433 {
434 return null;
435 }
436
437 return new Bizproc\BaseType\Value\DateTime($timestamp);
438 }
439
440 public function callLocDate(Arguments $args)
441 {
442 $format = $args->getFirst();
443 $date = $args->getSecondSingle();
444
445 if (!$format || !is_string($format))
446 {
447 return null;
448 }
449
450 $reformFormat = $this->frameSymbolsInDateFormat($format);
451 $timestamp = $date ? $this->makeTimestamp($date, true) : time();
452
453 if (!$timestamp)
454 {
455 return null;
456 }
457
458 $formattedDate = date($reformFormat, $timestamp);
459 // return \FormatDate($format, $timestamp); - TODO
460 if ($formattedDate === false)
461 {
462 return null;
463 }
464
465 return $this->replaceDateToLocDate($formattedDate, $reformFormat);
466 }
467
468 public function callSetTime(Arguments $args)
469 {
470 $date = $args->getFirstSingle();
471 $currentOffset = $this->getDateTimeOffset($date);
472
473 $hour = max(0, (int)$args->getSecondSingle());
474 $minute = max(0, (int)$args->getThirdSingle());
475
476 $timeOffset = $hour * self::ONE_HOUR + $minute * 60;
477 $baseOffset = max(
478 -1 * self::TWELVE_HOURS,
479 min(self::TWELVE_HOURS, (int)$args->getArgSingle(3))
480 );
481
482 if ($baseOffset !== 0)
483 {
484 $timeOffset -= $baseOffset;
485 }
486
487 if (($date = $this->makeTimestamp($date, true)) === false)
488 {
489 return null;
490 }
491
493 $dateTime->setTime(0, 0, 0, 0);
494
495 $date = $dateTime->getTimestamp() + $timeOffset;
496
497 return new Bizproc\BaseType\Value\DateTime($date, $currentOffset);
498 }
499
500 private function makeTimestamp($date, $appendOffset = false)
501 {
502 if (!$date || (!is_scalar($date) && !is_object($date)))
503 {
504 return false;
505 }
506
507 //serialized date string
508 if (is_string($date) && Bizproc\BaseType\Value\Date::isSerialized($date))
509 {
510 $date = new Bizproc\BaseType\Value\Date($date);
511 }
512
513 if ($date instanceof Bizproc\BaseType\Value\Date)
514 {
515 return $date->getTimestamp() + ($appendOffset ? $date->getOffset() : 0);
516 }
517
518 if (intval($date) . "!" === $date . "!")
519 {
520 return $date;
521 }
522
523 if (($result = MakeTimeStamp($date, FORMAT_DATETIME)) === false)
524 {
525 if (($result = MakeTimeStamp($date, FORMAT_DATE)) === false)
526 {
527 if (($result = MakeTimeStamp($date, "YYYY-MM-DD HH:MI:SS")) === false)
528 {
529 $result = MakeTimeStamp($date, "YYYY-MM-DD");
530 }
531 }
532 }
533 return $result;
534 }
535
536 private function getWorkDayTimestamp($date)
537 {
538 return date('H', $date) * 3600 + date('i', $date) * 60;
539 }
540
541 private function getWorkDayRemainTimestamp($date, $multiplier = 1)
542 {
543 $dayTs = $this->getWorkDayTimestamp($date);
544 [$startSeconds, $endSeconds] = $this->getCalendarWorkTime();
545 return $multiplier < 0 ? $dayTs - $startSeconds : $endSeconds - $dayTs;
546 }
547
548 private function getWorkDayInterval()
549 {
550 [$startSeconds, $endSeconds] = $this->getCalendarWorkTime();
551 return $endSeconds - $startSeconds;
552 }
553
554 private function isHoliday($date)
555 {
556 [$yearWorkdays] = $this->getCalendarWorkdays();
557 [$weekHolidays, $yearHolidays] = $this->getCalendarHolidays();
558
559 $dayOfYear = date('j.n', $date);
560 if (in_array($dayOfYear, $yearWorkdays, true))
561 {
562 return false;
563 }
564
565 $dayOfWeek = date('w', $date);
566 if (in_array($dayOfWeek, $weekHolidays))
567 {
568 return true;
569 }
570
571 $dayOfYear = date('j.n', $date);
572 if (in_array($dayOfYear, $yearHolidays, true))
573 {
574 return true;
575 }
576
577 return false;
578 }
579
580 private function isWorkTime($date)
581 {
582 $dayTs = $this->getWorkDayTimestamp($date);
583 [$startSeconds, $endSeconds] = $this->getCalendarWorkTime();
584 return ($dayTs >= $startSeconds && $dayTs <= $endSeconds);
585 }
586
587 private function getNearestWorkTime($date, $multiplier = 1)
588 {
589 $reverse = $multiplier < 0;
590 [$startSeconds, $endSeconds] = $this->getCalendarWorkTime();
591 $dayTimeStamp = $this->getWorkDayTimestamp($date);
592
593 if ($this->isHoliday($date))
594 {
595 $date -= $dayTimeStamp;
596 $date += $reverse ? -86400 + $endSeconds : $startSeconds;
597 $dayTimeStamp = $reverse ? $endSeconds : $startSeconds;
598 }
599
600 if (!$this->isWorkTime($date))
601 {
602 $date -= $dayTimeStamp;
603
604 if ($dayTimeStamp < $startSeconds)
605 {
606 $date += $reverse ? -86400 + $endSeconds : $startSeconds;
607 }
608 else
609 {
610 $date += $reverse ? $endSeconds : 86400 + $startSeconds;
611 }
612 }
613
614 if ($this->isHoliday($date))
615 {
616 $date = $this->addWorkDay($date, $reverse ? -1 : 1);
617 }
618
619 return $date;
620 }
621
622 private function addWorkDay($date, $days)
623 {
624 $delta = 86400;
625 if ($days < 0)
626 {
627 $delta *= -1;
628 }
629
630 $days = abs($days);
631 $iterations = 0;
632
633 while ($days > 0 && $iterations < 1000)
634 {
635 ++$iterations;
636 $date += $delta;
637
638 if ($this->isHoliday($date))
639 {
640 continue;
641 }
642 --$days;
643 }
644
645 return $date;
646 }
647
648 private function getCalendarHolidays()
649 {
650 if (static::$yearHolidays === null)
651 {
652 $calendarSettings = \CCalendar::GetSettings();
653 $weekHolidays = [0, 6];
654 $yearHolidays = [];
655
656 if (isset($calendarSettings['week_holidays']))
657 {
658 $weekDays = ['SU' => 0, 'MO' => 1, 'TU' => 2, 'WE' => 3, 'TH' => 4, 'FR' => 5, 'SA' => 6];
659 $weekHolidays = [];
660 foreach ($calendarSettings['week_holidays'] as $day)
661 {
662 $weekHolidays[] = $weekDays[$day];
663 }
664 }
665
666 if (isset($calendarSettings['year_holidays']))
667 {
668 foreach (explode(',', $calendarSettings['year_holidays']) as $yearHoliday)
669 {
670 $date = explode('.', trim($yearHoliday));
671 if (count($date) == 2 && $date[0] && $date[1])
672 {
673 $yearHolidays[] = (int)$date[0] . '.' . (int)$date[1];
674 }
675 }
676 }
677 static::$weekHolidays = $weekHolidays;
678 static::$yearHolidays = $yearHolidays;
679 }
680
681 return [static::$weekHolidays, static::$yearHolidays];
682 }
683
684 private function getCalendarWorkTime()
685 {
686 if (static::$startWorkDay === null)
687 {
688 $startSeconds = 0;
689 $endSeconds = 24 * 3600 - 1;
690
691 $calendarSettings = \CCalendar::GetSettings();
692 if (!empty($calendarSettings['work_time_start']))
693 {
694 $time = explode('.', $calendarSettings['work_time_start']);
695 $startSeconds = $time[0] * 3600;
696 if (!empty($time[1]))
697 {
698 $startSeconds += $time[1] * 60;
699 }
700 }
701
702 if (!empty($calendarSettings['work_time_end']))
703 {
704 $time = explode('.', $calendarSettings['work_time_end']);
705 $endSeconds = $time[0] * 3600;
706 if (!empty($time[1]))
707 {
708 $endSeconds += $time[1] * 60;
709 }
710 }
711 static::$startWorkDay = $startSeconds;
712 static::$endWorkDay = $endSeconds;
713 }
714 return [static::$startWorkDay, static::$endWorkDay];
715 }
716
717 private function getCalendarWorkdays()
718 {
719 if (static::$yearWorkdays === null)
720 {
721 $yearWorkdays = [];
722
723 $calendarSettings = \CCalendar::GetSettings();
724 $calendarYearWorkdays = $calendarSettings['year_workdays'] ?? '';
725
726 foreach (explode(',', $calendarYearWorkdays) as $yearWorkday)
727 {
728 $date = explode('.', trim($yearWorkday));
729 if (count($date) === 2 && $date[0] && $date[1])
730 {
731 $yearWorkdays[] = (int)$date[0] . '.' . (int)$date[1];
732 }
733 }
734
735 static::$yearWorkdays = $yearWorkdays;
736 }
737
738 return [static::$yearWorkdays];
739 }
740
741 private function getDateTimeObject($date)
742 {
743 if ($date instanceof Bizproc\BaseType\Value\Date)
744 {
745 return (new \DateTime())->setTimestamp($date->getTimestamp());
746 }
747 elseif (is_array($date))
748 {
749 $date = \CBPHelper::flatten($date);
750 }
751
752 if (!is_scalar($date))
753 {
754 return false;
755 }
756
757 $df = Main\Type\DateTime::getFormat();
758 $df2 = Main\Type\Date::getFormat();
759 $date1Formatted = \DateTime::createFromFormat($df, $date);
760 if ($date1Formatted === false)
761 {
762 $date1Formatted = \DateTime::createFromFormat($df2, $date);
763 if ($date1Formatted)
764 {
765 $date1Formatted->setTime(0, 0);
766 }
767 }
768 return $date1Formatted;
769 }
770
771 private function getDateTimeOffset($date)
772 {
773 if ($date instanceof Bizproc\BaseType\Value\Date)
774 {
775 return $date->getOffset();
776 }
777
778 return 0;
779 }
780
781 private function frameSymbolsInDateFormat($format)
782 {
783 $complexSymbols = ['j F', 'd F', 'jS F'];
784 $symbols = ['D', 'l', 'F', 'M', 'r'];
785
786 $frameRule = [];
787 foreach ($symbols as $symbol)
788 {
789 $frameRule[$symbol] = '#' . $symbol . '#';
790 $frameRule['\\' . $symbol] = '\\' . $symbol;
791 }
792 foreach ($complexSymbols as $symbol)
793 {
794 $frameRule[$symbol] = substr($symbol, 0, -1) . '#' . $symbol[-1] . '_1#';
795 $frameRule['\\' . $symbol] = '\\' . substr($symbol, 0, -1) . '#' . $symbol[-1] . '#';
796 }
797
798 return strtr($format, $frameRule);
799 }
800
801 private function frameNamesInFormattedDateRFC2822($formattedDate)
802 {
803 $matches = [];
804 $pattern = "/#(\w{3}), \d{2} (\w{3}) \d{4} \d{2}:\d{2}:\d{2} [+-]\d{4}#/";
805 if (preg_match_all($pattern, $formattedDate, $matches))
806 {
807 foreach ($matches[0] as $key => $match)
808 {
809 $day = $matches[1][$key];
810 $month = $matches[2][$key];
811
812 $reformMatch = str_replace(
813 [$day, $month],
814 ['#' . $day . '#', '#' . $month . '#'],
815 $match
816 );
817 $reformMatch = substr($reformMatch, 1, -1);
818
819 $formattedDate = str_replace($match, $reformMatch, $formattedDate);
820 }
821 }
822
823 return $formattedDate;
824 }
825
826 private function replaceDateToLocDate($formattedDate, $format)
827 {
828 $lenShortName = 3;
829 $dayNames = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];
830 $monthNames = [
831 'January',
832 'February',
833 'March',
834 'April',
835 'May',
836 'June',
837 'July',
838 'August',
839 'September',
840 'October',
841 'November',
842 'December',
843 ];
844
845 if (strpos($format, '#r#') !== false)
846 {
847 $formattedDate = $this->frameNamesInFormattedDateRFC2822($formattedDate);
848 }
849
850 $replacementRule = [];
851 foreach (array_merge($dayNames, $monthNames) as $name)
852 {
853 $replacementRule['#' . $name . '#'] = Loc::getMessage(
854 'BIZPROC_CALC_FUNCTION_LOCDATE_' . strtoupper($name)
855 );
856 $shortName = substr($name, 0, $lenShortName);
857 $replacementRule['#' . $shortName . '#'] = Loc::getMessage(
858 'BIZPROC_CALC_FUNCTION_LOCDATE_' . strtoupper($shortName) . '_SHORT'
859 );
860 }
861 foreach ($monthNames as $monthName)
862 {
863 $replacementRule['#' . $monthName . '_1' . '#'] = Loc::getMessage(
864 'BIZPROC_CALC_FUNCTION_LOCDATE_' . strtoupper($monthName) . '_1'
865 );
866 }
867
868 return strtr($formattedDate, $replacementRule);
869 }
870}
if(!is_object($USER)||! $USER->IsAuthorized()) $userId
Определения check_mail.php:18
setArgs(array $args)
Определения Arguments.php:21
getArgSingle(int $position)
Определения Arguments.php:97
callSetTime(Arguments $args)
Определения DateLib.php:468
callDateDiff(Arguments $args)
Определения DateLib.php:330
callDate(Arguments $args)
Определения DateLib.php:354
callIsWorkDay(Arguments $args)
Определения DateLib.php:278
callLocDate(Arguments $args)
Определения DateLib.php:440
callWorkDateAdd(Arguments $args)
Определения DateLib.php:159
callGetUserDateOffset(Arguments $args)
Определения DateLib.php:399
callToUserDate(Arguments $args)
Определения DateLib.php:374
callDateAdd(Arguments $args)
Определения DateLib.php:87
callAddWorkDays(Arguments $args)
Определения DateLib.php:257
callStrtotime(Arguments $args)
Определения DateLib.php:418
callIsWorkTime(Arguments $args)
Определения DateLib.php:304
Определения date.php:9
static createFromTimestamp($timestamp)
Определения datetime.php:246
$hours
Определения cron_html_pages.php:15
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$result
Определения get_property_values.php:14
$p
Определения group_list_element_edit.php:23
const FORMAT_DATETIME
Определения include.php:64
const FORMAT_DATE
Определения include.php:63
AddToTimeStamp($arrAdd, $stmp=false)
Определения tools.php:687
MakeTimeStamp($datetime, $format=false)
Определения tools.php:538
$name
Определения menu_edit.php:35
Определения base.php:3
$user
Определения mysql_to_pgsql.php:33
$time
Определения payment.php:61
$delta
Определения prolog_main_admin.php:363
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения prolog_main_admin.php:393
if(empty($signedUserToken)) $key
Определения quickway.php:257
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"
Определения waybill.php:936
if(!Loader::includeModule('sale')) $pattern
Определения index.php:20
$matches
Определения index.php:22