![]() 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/old/vendor/magento/framework/Stdlib/DateTime/Intl/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Framework\Stdlib\DateTime\Intl; /** * Class to get Intl date formatter by locale */ class DateFormatterFactory { /** * Custom date formats by locale */ private const CUSTOM_DATE_FORMATS = [ 'ar_SA' => [ \IntlDateFormatter::SHORT => 'd/MM/y', ] ]; /** * Create Intl Date formatter * * The Intl Date formatter gives date formats by ICU standard. * http://userguide.icu-project.org/formatparse/datetime * * @param string $locale * @param int $dateStyle * @param int $timeStyle * @param string|null $timeZone * @param bool $useFourDigitsForYear * @return \IntlDateFormatter */ public function create( string $locale, int $dateStyle, int $timeStyle, ?string $timeZone = null, bool $useFourDigitsForYear = true ): \IntlDateFormatter { $formatter = new \IntlDateFormatter( $locale, $dateStyle, $timeStyle, $timeZone ); /** * Process custom date formats */ $customDateFormat = $this->getCustomDateFormat($locale, $dateStyle, $timeStyle); if ($customDateFormat !== null) { $formatter->setPattern($customDateFormat); } elseif ($dateStyle === \IntlDateFormatter::SHORT && $useFourDigitsForYear) { /** * Gives 4 places for year value in short style */ $longYearPattern = $this->setFourYearPlaces((string)$formatter->getPattern()); $formatter->setPattern($longYearPattern); } return $formatter; } /** * Get custom date format if it exists * * @param string $locale * @param int $dateStyle * @param int $timeStyle * @return string */ private function getCustomDateFormat(string $locale, int $dateStyle, int $timeStyle): ?string { $customDateFormat = null; if ($dateStyle !== \IntlDateFormatter::NONE && isset(self::CUSTOM_DATE_FORMATS[$locale][$dateStyle])) { $customDateFormat = self::CUSTOM_DATE_FORMATS[$locale][$dateStyle]; if ($timeStyle !== \IntlDateFormatter::NONE) { $timeFormat = (new \IntlDateFormatter($locale, \IntlDateFormatter::NONE, $timeStyle)) ->getPattern(); $customDateFormat .= ' ' . $timeFormat; } } return $customDateFormat; } /** * Set 4 places for year value in format string * * @param string $format * @return string */ private function setFourYearPlaces(string $format): string { return preg_replace( '/(?<!y)yy(?!y)/', 'y', $format ); } }