Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
9 / 9
100.00% covered (success)
100.00%
1 / 1
CRAP
100.00% covered (success)
100.00%
1 / 1
IntlDateFrmtrFactory
100.00% covered (success)
100.00%
9 / 9
100.00% covered (success)
100.00%
1 / 1
5
100.00% covered (success)
100.00%
1 / 1
 makeFrmtr
100.00% covered (success)
100.00%
9 / 9
100.00% covered (success)
100.00%
1 / 1
5
1<?php
2
3/**
4 * @author: Doug Wilbourne (dougwilbourne@gmail.com)
5 */
6declare(strict_types=1);
7
8namespace pvc\intl;
9
10use DateTimeZone;
11use IntlDateFormatter;
12use pvc\intl\err\InvalidCalendarTypeException;
13use pvc\intl\err\InvalidDateTimeTypeException;
14
15/**
16 * Class IntlDateFrmtrFactory
17 * a simple wrapper so that pvc exceptions are thrown for invalid arguments to the makeFrmtr method
18 */
19class IntlDateFrmtrFactory
20{
21    /**
22     * @var int[]
23     */
24    protected static array $validDateTimeTypes = [
25        IntlDateFormatter::NONE,
26        IntlDateFormatter::FULL,
27        IntlDateFormatter::LONG,
28        IntlDateFormatter::MEDIUM,
29        IntlDateFormatter::SHORT,
30    ];
31
32    /**
33     * @var int[]
34     * there are other calendars that the international date formatter will use, but they must be specified in the
35     * locale.  See the documentation for the IntlDateFormatter class.
36     */
37    protected static array $validCalendarTypes = [
38        IntlDateFormatter::TRADITIONAL,
39        IntlDateFormatter::GREGORIAN,
40    ];
41
42    /**
43     * makeFrmtr
44     * @param Locale $locale
45     * @param int $dateFormat
46     * @param int $timeFormat
47     * @param DateTimeZone $tz
48     * @param int $calendar |null
49     * @return IntlDateFormatter
50     * @throws InvalidCalendarTypeException
51     * @throws InvalidDateTimeTypeException
52     */
53    public static function makeFrmtr(
54        Locale $locale,
55        int $dateFormat,
56        int $timeFormat,
57        DateTimeZone $tz,
58        int $calendar = null
59    ): IntlDateFormatter {
60        if (!in_array($dateFormat, self::$validDateTimeTypes)) {
61            throw new InvalidDateTimeTypeException();
62        }
63        if (!in_array($timeFormat, self::$validDateTimeTypes)) {
64            throw new InvalidDateTimeTypeException();
65        }
66        if (is_null($calendar)) {
67            $calendar = IntlDateFormatter::GREGORIAN;
68        }
69        if (!in_array($calendar, self::$validCalendarTypes)) {
70            throw new InvalidCalendarTypeException();
71        }
72        return new IntlDateFormatter((string)$locale, $dateFormat, $timeFormat, $tz, $calendar);
73    }
74}