Feature: #100187 - ICU-based date and time formatting
See forge#100187
Description
TYPO3 now supports rendering date and time based on formats/patterns defined by the International Components for Unicode standard (ICU).
TYPO3 previously only supported rendering of dates based on the PHP-native
functions
date
and
strftime
.
However,
date
can only format dates with English texts, such as
"December" as non-localized values, the C-based
strftime
function works
only with the locale defined in PHP and availability in the underlying operating
system.
In addition, ICU-based date and time formatting is much more flexible in
rendering, as it ships with default patterns for date and time (namely
FULL
, LONG
, MEDIUM
and SHORT
) which are based on the given locale.
This means, that when the locale en-
is given, the short date is rendered
as mm/
whereas de-
uses the dd.
syntax automatically,
without having to define a custom pattern just by using the SHORT default
pattern.
In addition, the patterns can be adjusted more fine-grained, and can easily deal with time zones for output when DateTime objects are handed in.
TYPO3 also adds prepared custom patterns:
FULLDATE
(likeFULL
, but only the date information)FULLTIME
(likeFULL
, but only the time information)LONGDATE
(likeLONG
, but only the date information)LONGTIME
(likeLONG
, but only the time information)MEDIUMDATE
(likeMEDIUM
, but only the date information)MEDIUMTIME
(likeMEDIUM
, but only the time information)SHORTDATE
(likeSHORT
, but only the date information)SHORTTIME
(likeSHORT
, but only the time information)
See https://unicode-org.github.io/icu/userguide/format_parse/datetime/#datetime-format-syntax for more information on the patterns.
Impact
A new stdWrap feature called formatted
is added, and the new formatting
can also be used in Fluid's
<f:
ViewHelper.
The locale is typically fetched from the locale of the site language (stdWrap or ViewHelper), or the backend user's language (in backend context) for the ViewHelper usages.
Examples for stdWrap:
page.10 = TEXT
page.10.value = 1998-02-20 3:00:00
# see all available options https://unicode-org.github.io/icu/userguide/format_parse/datetime/#datetime-format-syntax
page.10.formattedDate = FULL
# optional, if a different locale is wanted other than the Site Language's locale
page.10.formattedDate.locale = de-DE
will result in "Freitag, 20. Februar 1998 um 03:00:00 Koordinierte Weltzeit".
page.10 = TEXT
page.10.value = -5 days
page.10.formattedDate = FULL
page.10.formattedDate.locale = fr-FR
will result in "jeudi 9 mars 2023 à 21:40:49 temps universel coordonné".
Examples for Fluid <f:
ViewHelper:
<f:format.date pattern="dd. MMMM yyyy" locale="de-DE">{date}</f:format.date>
will result in "20. Februar 1998".
As soon as the
pattern
attribute is used, the
format
attribute
is disregarded.
Both new ViewHelper arguments are optional.