![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/mautic.corals.io/app/bundles/CoreBundle/Twig/Helper/ |
<?php namespace Mautic\CoreBundle\Twig\Helper; use Mautic\CoreBundle\Helper\CoreParametersHelper; use Mautic\CoreBundle\Helper\DateTimeHelper; use Symfony\Contracts\Translation\TranslatorInterface; final class DateHelper { /** * @var string[] */ private array $formats; private DateTimeHelper $helper; /** * @param string $dateFullFormat * @param string $dateShortFormat * @param string $dateOnlyFormat * @param string $timeOnlyFormat */ public function __construct( $dateFullFormat, $dateShortFormat, $dateOnlyFormat, $timeOnlyFormat, private TranslatorInterface $translator, private CoreParametersHelper $coreParametersHelper ) { $this->formats = [ 'datetime' => $dateFullFormat, 'short' => $dateShortFormat, 'date' => $dateOnlyFormat, 'time' => $timeOnlyFormat, ]; $this->helper = new DateTimeHelper('', 'Y-m-d H:i:s', 'local'); } /** * @param string $type * @param \DateTime|string $datetime * @param string $timezone * @param string $fromFormat * * @return string */ private function format($type, $datetime, $timezone, $fromFormat) { if (empty($datetime)) { return ''; } else { $this->helper->setDateTime($datetime, $fromFormat, $timezone); return $this->helper->toLocalString( $this->formats[$type] ); } } /** * Returns full date. eg. October 8, 2014 21:19. * * @param \DateTime|string $datetime * @param string $timezone * @param string $fromFormat * * @return string */ public function toFull($datetime, $timezone = 'local', $fromFormat = 'Y-m-d H:i:s') { return $this->format('datetime', $datetime, $timezone, $fromFormat); } /** * Returns date and time concat eg 2014-08-02 5:00am. * * @param \DateTime|string $datetime * @param string $timezone * @param string $fromFormat * * @return string */ public function toFullConcat($datetime, $timezone = 'local', $fromFormat = 'Y-m-d H:i:s') { $this->helper->setDateTime($datetime, $fromFormat, $timezone); return $this->helper->toLocalString( $this->formats['date'].' '.$this->formats['time'] ); } /** * Returns short date format eg Sun, Oct 8. * * @param \DateTime|string $datetime * @param string $timezone * @param string $fromFormat * * @return string */ public function toShort($datetime, $timezone = 'local', $fromFormat = 'Y-m-d H:i:s') { return $this->format('short', $datetime, $timezone, $fromFormat); } /** * Returns date only e.g. 2014-08-09. * * @param \DateTime|string $datetime * @param string $timezone * @param string $fromFormat * * @return string */ public function toDate($datetime, $timezone = 'local', $fromFormat = 'Y-m-d H:i:s') { return $this->format('date', $datetime, $timezone, $fromFormat); } /** * Returns time only e.g. 21:19. * * @param \DateTime|string $datetime * @param string $timezone * @param string $fromFormat * * @return string */ public function toTime($datetime, $timezone = 'local', $fromFormat = 'Y-m-d H:i:s') { return $this->format('time', $datetime, $timezone, $fromFormat); } /** * Returns date/time like Today, 10:00 AM. * * @param string|int<min, -1>|int<1, max>|\DateTime $datetime * @param string $timezone * @param string $fromFormat * @param bool $forceDateForNonText If true, return as full date/time rather than "29 days ago" */ public function toText($datetime, $timezone = 'local', $fromFormat = 'Y-m-d H:i:s', $forceDateForNonText = false): string { if (empty($datetime)) { return ''; } $this->helper->setDateTime($datetime, $fromFormat, $timezone); $textDate = $this->helper->getTextDate(); $dt = $this->helper->getLocalDateTime(); if ($textDate) { return $this->translator->trans('mautic.core.date.'.$textDate, ['%time%' => $dt->format($this->coreParametersHelper->get('date_format_timeonly'))]); } else { $interval = $this->helper->getDiff('now', null, true); if ($interval->invert && !$forceDateForNonText) { // In the past return $this->translator->trans('mautic.core.date.ago', ['%days%' => $interval->days]); } else { // In the future return $this->toFullConcat($datetime, $timezone, $fromFormat); } } } /** * Format DateInterval into humanly readable format. * Example: 55 minutes 49 seconds. * It doesn't return zero values like 0 years. */ public function formatRange(\DateInterval $range): string { $formated = []; $timeUnits = ['y' => 'year', 'm' => 'month', 'd' => 'day', 'h' => 'hour', 'i' => 'minute', 's' => 'second']; foreach ($timeUnits as $key => $unit) { if ($range->{$key}) { $formated[] = $this->translator->trans( 'mautic.core.date.'.$unit, ['%count%' => $range->{$key}] ); } } if (empty($formated)) { return $this->translator->trans('mautic.core.date.less.than.second'); } return implode(' ', $formated); } /** * @return string */ public function getFullFormat() { return $this->formats['datetime']; } /** * @return string */ public function getDateFormat() { return $this->formats['date']; } /** * @return string */ public function getTimeFormat() { return $this->formats['time']; } /** * @return string */ public function getShortFormat() { return $this->formats['short']; } public function getName(): string { return 'date'; } }