<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<refentry xml:id="datetimezone.construct" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
 <refnamediv>
  <refname>DateTimeZone::__construct</refname>
  <refname>timezone_open</refname>
  <refpurpose>Creates new DateTimeZone object</refpurpose>
 </refnamediv>

 <refsect1 role="description">
  &reftitle.description;
  <para>&style.oop;</para>
  <constructorsynopsis role="DateTimeZone">
   <modifier>public</modifier> <methodname>DateTimeZone::__construct</methodname>
   <methodparam><type>string</type><parameter>timezone</parameter></methodparam>
  </constructorsynopsis>
  <para>&style.procedural;</para>
  <methodsynopsis>
   <type class="union"><type>DateTimeZone</type><type>false</type></type><methodname>timezone_open</methodname>
   <methodparam><type>string</type><parameter>timezone</parameter></methodparam>
  </methodsynopsis>
  <para>
   Creates a new DateTimeZone object.
  </para>
  <para>
   A DateTimeZone object provides access to three different types of timezone
   rules: UTC offset (type <literal>1</literal>), timezone abbreviation (type
   <literal>2</literal>), and <link linkend="timezones">timezone
   identifiers</link> as published in the IANA timezone database
   (type <literal>3</literal>).
  </para>
  <para>
   The DateTimeZone object can be attached to <classname>DateTime</classname> and
   <classname>DateTimeImmutable</classname> objects to be able to render the
   timezone encapsulated by these objects in a local timezone.
  </para>
 </refsect1>

 <refsect1 role="parameters">
  &reftitle.parameters;
  <para>
   <variablelist>
    <varlistentry>
     <term><parameter>timezone</parameter></term>
     <listitem>
      <para>
       One of the supported <link linkend="timezones">timezone names</link>,
       an offset value (+0200), or a timezone abbreviation (BST).
      </para>
     </listitem>
    </varlistentry>
   </variablelist>
  </para>
 </refsect1>
 
 <refsect1 role="returnvalues">
  &reftitle.returnvalues;
  <para>
   Returns <classname>DateTimeZone</classname> on success.
   &return.falseforfailure.style.procedural;
  </para>
 </refsect1>
 
 <refsect1 role="errors">
  &reftitle.errors;
  <para>
   This method throws
   <exceptionname>DateInvalidTimeZoneException</exceptionname> if the timezone supplied is not
   recognised as a valid timezone. Prior to PHP 8.3, this was an
   <exceptionname>Exception</exceptionname> instead.
  </para>
 </refsect1>

 <refsect1 role="changelog">
  &reftitle.changelog;
  <para>
   <informaltable>
    <tgroup cols="2">
     <thead>
      <row>
       <entry>&Version;</entry>
       <entry>&Description;</entry>
      </row>
     </thead>
     <tbody>
      <row>
       <entry>8.3.0</entry>
       <entry>
        Invalid values now return a
        <exceptionname>DateInvalidTimeZoneException</exceptionname> instead of
        a generic <exceptionname>Exception</exceptionname>.
       </entry>
      </row>
     </tbody>
    </tgroup>
   </informaltable>
  </para>
 </refsect1>
 
 <refsect1 role="examples">
  &reftitle.examples;
  <para>
   <example>
    <title>Creating and attaching DateTimeZone to a DateTimeImmutable</title>
    <programlisting role="php">
<![CDATA[
<?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";
}
?>
]]>
    </programlisting>
    &example.outputs;
    <screen>
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
    </screen>
   </example>
  </para>

  <para>
   <example>
    <title>Catching errors when instantiating <classname>DateTimeZone</classname></title>
    <programlisting role="php">
<![CDATA[
<?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 />';
    }
}
?>
]]>
    </programlisting>
    &example.outputs;
    <screen>
<![CDATA[
DateTimeZone::__construct() [datetimezone.--construct]: Unknown or bad timezone (Mars/Phobos)
DateTimeZone::__construct() [datetimezone.--construct]: Unknown or bad timezone (Jupiter/Europa)
]]>
    </screen>
   </example>
  </para>
 </refsect1>

</refentry>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->
