<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<refentry xml:id="function.mktime" xmlns="http://docbook.org/ns/docbook">
 <refnamediv>
  <refname>mktime</refname>
  <refpurpose>Get Unix timestamp for a date</refpurpose>
 </refnamediv>

 <refsect1 role="description">
  &reftitle.description;
  <methodsynopsis>
   <type class="union"><type>int</type><type>false</type></type><methodname>mktime</methodname>
   <methodparam><type>int</type><parameter>hour</parameter></methodparam>
   <methodparam choice="opt"><type class="union"><type>int</type><type>null</type></type><parameter>minute</parameter><initializer>&null;</initializer></methodparam>
   <methodparam choice="opt"><type class="union"><type>int</type><type>null</type></type><parameter>second</parameter><initializer>&null;</initializer></methodparam>
   <methodparam choice="opt"><type class="union"><type>int</type><type>null</type></type><parameter>month</parameter><initializer>&null;</initializer></methodparam>
   <methodparam choice="opt"><type class="union"><type>int</type><type>null</type></type><parameter>day</parameter><initializer>&null;</initializer></methodparam>
   <methodparam choice="opt"><type class="union"><type>int</type><type>null</type></type><parameter>year</parameter><initializer>&null;</initializer></methodparam>
  </methodsynopsis>
  <para>
   Returns the Unix timestamp corresponding to the arguments
   given. This timestamp is a long integer containing the number of
   seconds between the Unix Epoch (January 1 1970 00:00:00 GMT) and the time
   specified.
  </para>
  <para>
   Any optional
   arguments omitted or &null; will be set to the current value according
   to the local date and time.
  </para>
  <warning>
   <para>
    Please note that the ordering of arguments is in an odd order:
    <parameter>month</parameter>, <parameter>day</parameter>,
    <parameter>year</parameter>, and not in the more reasonable order of
    <parameter>year</parameter>, <parameter>month</parameter>,
    <parameter>day</parameter>.
   </para>
  </warning>
  <simpara>
   Calling <function>mktime</function> without arguments is not supported,
   and will result in an <classname>ArgumentCountError</classname>.
   <function>time</function> can be used to get the current timestamp.
  </simpara>
 </refsect1>

 <refsect1 role="parameters">
  &reftitle.parameters;
  <para>
   <variablelist>
    <varlistentry>
     <term><parameter>hour</parameter></term>
     <listitem>
      <para>
       The number of the hour relative to the start of the day determined by
       <parameter>month</parameter>, <parameter>day</parameter> and <parameter>year</parameter>.
       Negative values reference the hour before midnight of the day in question.
       Values greater than 23 reference the appropriate hour in the following day(s).
      </para>
     </listitem>
    </varlistentry>
    <varlistentry>
     <term><parameter>minute</parameter></term>
     <listitem>
      <para>
       The number of the minute relative to the start of the <parameter>hour</parameter>.
       Negative values reference the minute in the previous hour.
       Values greater than 59 reference the appropriate minute in the following hour(s).
      </para>
     </listitem>
    </varlistentry>
    <varlistentry>
     <term><parameter>second</parameter></term>
     <listitem>
      <para>
       The number of seconds relative to the start of the <parameter>minute</parameter>.
       Negative values reference the second in the previous minute.
       Values greater than 59 reference the appropriate second in the following minute(s).
      </para>
     </listitem>
    </varlistentry>
    <varlistentry>
     <term><parameter>month</parameter></term>
     <listitem>
      <para>
       The number of the month relative to the end of the previous year.
       Values 1 to 12 reference the normal calendar months of the year in question.
       Values less than 1 (including negative values) reference the months in the previous year in reverse order, so 0 is December, -1 is November, etc.
       Values greater than 12 reference the appropriate month in the following year(s).
      </para>
     </listitem>
    </varlistentry>
    <varlistentry>
     <term><parameter>day</parameter></term>
     <listitem>
      <para>
       The number of the day relative to the end of the previous month.
       Values 1 to 28, 29, 30 or 31 (depending upon the month) reference the normal days in the relevant month.
       Values less than 1 (including negative values) reference the days in the previous month, so 0 is the last day of the previous month, -1 is the day before that, etc.
       Values greater than the number of days in the relevant month reference the appropriate day in the following month(s).
      </para>
     </listitem>
    </varlistentry>
    <varlistentry>
     <term><parameter>year</parameter></term>
     <listitem>
      <para>
       The number of the year, may be a two or four digit value,
       with values between 0-69 mapping to 2000-2069 and 70-100 to
       1970-2000. On systems where time_t is a 32bit signed integer, as
       most common today, the valid range for <parameter>year</parameter> 
       is somewhere between 1901 and 2038.
      </para>
     </listitem>
    </varlistentry>
   </variablelist>
  </para>
 </refsect1>                                                                                                            
   
  
 <refsect1 role="returnvalues">
  &reftitle.returnvalues; 
  <para>
   <function>mktime</function> returns the Unix timestamp of the arguments
   given, or &false; if the timestamp doesn't fit in a PHP integer.
  </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.0.0</entry>
       <entry>
        <parameter>hour</parameter> is no longer optional. If you need a Unix
        timestamp, use <function>time</function>.
       </entry>
      </row>
      <row>
       <entry>8.0.0</entry>
       <entry>
        <parameter>minute</parameter>, <parameter>second</parameter>, <parameter>month</parameter>,
        <parameter>day</parameter> and <parameter>year</parameter> are nullable now.
       </entry>
      </row>
     </tbody>
    </tgroup>
   </informaltable>
  </para>
 </refsect1>

 <refsect1 role="examples">
  &reftitle.examples;
  <para>
   <example>
    <title><function>mktime</function> basic example</title>
    <programlisting role="php">
<![CDATA[
<?php
// Set the default timezone to use.
date_default_timezone_set('UTC');

// Prints: July 1, 2000 is on a Saturday
echo "July 1, 2000 is on a " . date("l", mktime(0, 0, 0, 7, 1, 2000));

// Prints something like: 2006-04-05T01:02:03+00:00
echo date('c', mktime(1, 2, 3, 4, 5, 2006));
?>
]]>
    </programlisting>
   </example>
  </para>
  <para>
   <example>
    <title><function>mktime</function> example</title>
    <para>
     <function>mktime</function> is useful for doing date arithmetic
     and validation, as it will automatically calculate the correct
     value for out-of-range input. For example, each of the following
     lines produces the string "Jan-01-1998".
    </para>
    <programlisting role="php">
<![CDATA[
<?php
echo date("M-d-Y", mktime(0, 0, 0, 12, 32, 1997));
echo date("M-d-Y", mktime(0, 0, 0, 13, 1, 1997));
echo date("M-d-Y", mktime(0, 0, 0, 1, 1, 1998));
echo date("M-d-Y", mktime(0, 0, 0, 1, 1, 98));
?>
]]>
    </programlisting>
   </example>
  </para>
  <para>
   <example>
    <title>Last day of a month</title>
    <para>
     The last day of any given month can be expressed as the "0" day
     of the next month, not the -1 day. Both of the following examples
     will produce the string "The last day in Feb 2000 is: 29".
    </para>
    <programlisting role="php">
<![CDATA[
<?php
$lastday = mktime(0, 0, 0, 3, 0, 2000);
echo strftime("Last day in Feb 2000 is: %d", $lastday);
$lastday = mktime(0, 0, 0, 4, -31, 2000);
echo strftime("Last day in Feb 2000 is: %d", $lastday);
?>
]]>
    </programlisting>
   </example>
  </para>
 </refsect1>

 <refsect1 role="seealso">
  &reftitle.seealso;
  <para>
   <simplelist>
    <member>The <classname>DateTimeImmutable</classname> class</member>
    <member><function>checkdate</function></member>
    <member><function>gmmktime</function></member>
    <member><function>date</function></member> 
    <member><function>time</function></member>
   </simplelist>
  </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
-->
