DateTimeZone::__construct

timezone_open

Creates new DateTimeZone object

&reftitle.description;

&style.oop;

public `DateTimeZone::__construct` `string` `timezone`

&style.procedural;

``DateTimeZone``false```timezone_open` `string` `timezone`

Creates a new DateTimeZone object.

A DateTimeZone object provides access to three different types of timezone rules: UTC offset (type `1`), timezone abbreviation (type `2`), and timezone identifiers as published in the IANA timezone database (type `3`).

The DateTimeZone object can be attached to `DateTime` and `DateTimeImmutable` objects to be able to render the timezone encapsulated by these objects in a local timezone.

&reftitle.parameters;

`timezone`

- One of the supported timezone names, an offset value (+0200), or a timezone abbreviation (BST).

&reftitle.returnvalues;

Returns `DateTimeZone` on success. &return.falseforfailure.style.procedural;

&reftitle.errors;

This method throws DateInvalidTimeZoneException if the timezone supplied is not recognised as a valid timezone. Prior to PHP 8.3, this was an Exception instead.

&reftitle.changelog;

&Version; | &Description;
8.3.0 | Invalid values now return a DateInvalidTimeZoneException instead of a generic Exception.

&reftitle.examples;

### Creating and attaching DateTimeZone to a DateTimeImmutable

    <?php
    $d = new DateTimeImmutable("2022-06-02 15:44:48 UTC");

    $timezones = [ 'Europe/London', 'GMT+04:45', '-06:00', 'CEST' ];

    foreach ($timezones as $tz) {
        $tzo = new DateTimeZone($tz);

        $local = $d->setTimezone($tzo);
        echo $local->format(DateTimeInterface::RFC2822 . ' — e'), "\n";
    }
    ?>

&example.outputs;

    Thu, 02 Jun 2022 16:44:48 +0100 — Europe/London
    Thu, 02 Jun 2022 20:29:48 +0445 — +04:45
    Thu, 02 Jun 2022 09:44:48 -0600 — -06:00
    Thu, 02 Jun 2022 17:44:48 +0200 — CEST

### Catching errors when instantiating `DateTimeZone`

    <?php
    // Error handling by catching exceptions
    $timezones = array('Europe/London', 'Mars/Phobos', 'Jupiter/Europa');

    foreach ($timezones as $tz) {
        try {
            $mars = new DateTimeZone($tz);
        } catch(Exception $e) {
            echo $e->getMessage() . '<br />';
        }
    }
    ?>

&example.outputs;

    DateTimeZone::__construct() [datetimezone.--construct]: Unknown or bad timezone (Mars/Phobos)
    DateTimeZone::__construct() [datetimezone.--construct]: Unknown or bad timezone (Jupiter/Europa)