Re: Proposal: add IntlDateTimePatternGenerator
| From: | Máté Kocsis | Date: | Sun, 28 Mar 2021 17:45:46 +0000 |
| Subject: | Re: Proposal: add IntlDateTimePatternGenerator | ||
| References: | 1 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-113835@lists.php.net to get a copy of this message | ||
Hi Mel,
Thank you very much for working on this! I was bitten by lack of this
functionality a few years ago, and I couldn't find any (good) alternative.
Thus, I'm looking forward to having
IntlDateTimePatternGenerator in
ext/intl.
I think it could be mentioned for those who don't open the bug report that
HHVM implemented this class long ago:
https://github.com/facebook/hhvm/commit/bc84daf7816e4cd268da59d535dcadfc6cf01085
Now that I see their implementation again, I'm wondering
if IntlDateTimePatternGenerator is the right name, or we should also use
IntlDatePatternGenerator, which is more in line with `IntlDateFormatter..
Regards:
Máté
Mel Dafert <mel@dafert.at> ezt írta (időpont: 2021. márc. 28.., V, 16:54):
> Hello Internals,
>
> I would like to propose an addition to the intl extension,
> IntlDateTimePatternGenerator.
> ICU exposes the DateTimePatternGenerator class that allows generating a
> formatting pattern from a given "skeleton" for a given locale. (see
>
> https://unicode-org.github.io/icu-docs/apidoc/dev/icu4c/classicu_1_1DateTimePatternGenerator.html
> )
> This allows more flexibility than the current $format argument of
> IntlDateFormatter::format(), which takes either a few pre-defined constants
> or a hard-coded format.
> This functionality also has been requested in the past. (see
> https://bugs.php.net/bug.php?id=70377)
>
> For example, if an application requires a format that will always use the
> long version of a year, but the short version of a month (eg. "MM/dd/YYYY"
> for "en_US", or "dd.MM.YYYY" for "de_DE"), one is out of luck.
> IntlDateFormatter::SHORT will use the short year for "de_DE" ("dd.MM.YY"),
> and IntlDateFormatter::MEDIUM will use the long version of a month for
> "en_US" ("MMM dd, YYYY").
>
> With IntlDateTimePatternGenerator::getBestPattern(), a skeleton can be
> provided to generate the appropriate pattern for a given locale.
> In the use-case given above, the skeleton "YYYYMMdd" will generate the
> desired patterns for each locale, which can then be passed to
> IntlDateFormatter::format().
>
> Proposed Signature:
> ```
> class IntlDateTimePatternGenerator
> {
> public function __construct(?string $locale = null) {}
>
> public static function create(?string $locale = null):
> ?IntlDateTimePatternGenerator {}
>
> public function getBestPattern(string $skeleton): string|false {}
> }
> ```
>
> Example use-case:
> ```
> $date = new \DateTime();
> $skeleton = "YYYYMMdd";
> $dtpg = new \IntlDateTimePatternGenerator(); // uses default locale if not
> specified
> $format = $dtpg->getBestPattern($skeleton);
>
> echo \IntlDateFormatter::formatObject($date, $format); // outputs
> "28.03.2020" for "de_DE" locale
>
> ```
>
> The proposed implementation can be found here:
> https://github.com/php/php-src/pull/6771
> I assume that this will require an RFC, in which case I request the karma
> to create one. My wiki account is deltragon.
>
> Regards,
> Mel Dafert
>
> --
> PHP Internals - PHP Runtime Development Mailing List
> To unsubscribe, visit: https://www.php.net/unsub.php
>
>