Create a date formatter

- « IntlDateFormatter

- IntlDateFormatter::format »

- PHP Manual
- IntlDateFormatter
- Create a date formatter

# IntlDateFormatter::create

# datefmt_create

# IntlDateFormatter::__construct

(PHP 5 >= 5.3.0, PHP 7, PHP 8, PECL intl >= 1.0.0)

IntlDateFormatter::create -- datefmt_create -- IntlDateFormatter::__construct — Create a date formatter

### Description

Object-oriented style

public static IntlDateFormatter::create(
?string `$locale`,
int `$dateType` = IntlDateFormatter::FULL,
int `$timeType` = IntlDateFormatter::FULL,
IntlTimeZone|DateTimeZone|string|null `$timezone` = `null`,
IntlCalendar|int|null `$calendar` = `null`,
?string `$pattern` = `null`
): ?IntlDateFormatter

Object-oriented style (constructor)

public IntlDateFormatter::__construct(
?string `$locale`,
int `$dateType` = IntlDateFormatter::FULL,
int `$timeType` = IntlDateFormatter::FULL,
IntlTimeZone|DateTimeZone|string|null `$timezone` = `null`,
IntlCalendar|int|null `$calendar` = `null`,
?string `$pattern` = `null`
)

Procedural style

datefmt_create(
?string `$locale`,
int `$dateType` = IntlDateFormatter::FULL,
int `$timeType` = IntlDateFormatter::FULL,
IntlTimeZone|DateTimeZone|string|null `$timezone` = `null`,
IntlCalendar|int|null `$calendar` = `null`,
?string `$pattern` = `null`
): ?IntlDateFormatter

Create a date formatter.

### Parameters

`locale`

  Locale to use when formatting or parsing or `null` to use the value specified in the ini setting intl.default_locale.

`dateType`

  Format of the date determined by one of the IntlDateFormatter constants. The default value is `IntlDateFormatter::FULL`.

`timeType`

  Format of the time determined by one of the IntlDateFormatter constants. The default value is `IntlDateFormatter::FULL`.

`timezone`

  Time zone ID. The default (and the one used if `null` is given) is the one returned by date_default_timezone_get() or, if applicable, that of the IntlCalendar object passed for the `calendar` parameter. This ID must be a valid identifier on ICUʼs database or an ID representing an explicit offset, such as `GMT-05:30`.

  This can also be an IntlTimeZone or a DateTimeZone object.

`calendar`

  Calendar to use for formatting or parsing. The default value is `null`, which corresponds to `IntlDateFormatter::GREGORIAN`. This can either be one of the IntlDateFormatter calendar constants or an IntlCalendar. Any IntlCalendar object passed will be clone; it will not be changed by the IntlDateFormatter. This will determine the calendar type used (gregorian, islamic, persian, etc.) and, if `null` is given for the `timezone` parameter, also the timezone used.

`pattern`

  Optional pattern to use when formatting or parsing. Possible patterns are documented at » https://unicode-org.github.io/icu/userguide/format_parse/datetime/.

### Return Values

The created IntlDateFormatter or `null` in case of failure.

### Errors/Exceptions

A ValueError is thrown if `locale` is invalid.

### Changelog

Version | Description
--- | ---
8.4.0 | A ValueError is thrown if `locale` is invalid.
8.1.0 | Parameters `dateType` and `timeType` are now optional.

### Examples

Example #1 datefmt_create() example

    <?php
    $fmt = datefmt_create( "en_US" ,IntlDateFormatter::FULL, IntlDateFormatter::FULL,
        'America/Los_Angeles', IntlDateFormatter::GREGORIAN  );
    echo "First Formatted output is ".datefmt_format( $fmt , 0);
    $fmt = datefmt_create( "de-DE" ,IntlDateFormatter::FULL, IntlDateFormatter::FULL,
        'America/Los_Angeles',IntlDateFormatter::GREGORIAN  );
    echo "Second Formatted output is ".datefmt_format( $fmt , 0);

    $fmt = datefmt_create( "en_US" ,IntlDateFormatter::FULL, IntlDateFormatter::FULL,
         'America/Los_Angeles',IntlDateFormatter::GREGORIAN  ,"MM/dd/yyyy");
    echo "First Formatted output with pattern is ".datefmt_format( $fmt , 0);
    $fmt = datefmt_create( "de-DE" ,IntlDateFormatter::FULL, IntlDateFormatter::FULL,
         'America/Los_Angeles',IntlDateFormatter::GREGORIAN  ,"MM/dd/yyyy");
    echo "Second Formatted output with pattern is ".datefmt_format( $fmt , 0);
    ?>

Example #2 OO example

    <?php
    $fmt = new IntlDateFormatter( "en_US" ,IntlDateFormatter::FULL, IntlDateFormatter::FULL,
        'America/Los_Angeles',IntlDateFormatter::GREGORIAN  );
    echo "First Formatted output is ".$fmt->format(0);
    $fmt = new IntlDateFormatter( "de-DE" ,IntlDateFormatter::FULL, IntlDateFormatter::FULL,
        'America/Los_Angeles',IntlDateFormatter::GREGORIAN  );
    echo "Second Formatted output is ".$fmt->format(0);

    $fmt = new IntlDateFormatter( "en_US" ,IntlDateFormatter::FULL, IntlDateFormatter::FULL,
         'America/Los_Angeles',IntlDateFormatter::GREGORIAN  ,"MM/dd/yyyy");
    echo "First Formatted output with pattern is ".$fmt->format(0);
    $fmt = new IntlDateFormatter( "de-DE" ,IntlDateFormatter::FULL, IntlDateFormatter::FULL,
          'America/Los_Angeles',IntlDateFormatter::GREGORIAN , "MM/dd/yyyy");
    echo "Second Formatted output with pattern is ".$fmt->format(0);
    ?>

Example #3 Example of invalid locale handling

    <?php
    try {
        $fmt = new IntlDateFormatter(
            'invalid_locale',
            IntlDateFormatter::FULL,
            IntlDateFormatter::FULL,
            'dunno',
            IntlDateFormatter::GREGORIAN,
        );
    } catch (\Error $e) {
        // ...
    }
    ?>

The above example will output:

    First Formatted output is Wednesday, December 31, 1969 4:00:00 PM PT
    Second Formatted output is Mittwoch, 31. Dezember 1969 16:00 Uhr GMT-08:00
    First Formatted output with pattern is 12/31/1969
    Second Formatted output with pattern is 12/31/1969

### See Also

- datefmt_format() - Format the date/time value as a string
- datefmt_parse() - Parse string to a timestamp value
- datefmt_get_error_code() - Get the error code from last operation
- datefmt_get_error_message() - Get the error text from the last operation