File: easter-date.xml

package info (click to toggle)
php-doc 20241205~git.dfcbb86%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 70,956 kB
  • sloc: xml: 968,269; php: 23,883; javascript: 671; sh: 177; makefile: 37
file content (236 lines) | stat: -rw-r--r-- 6,854 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<refentry xml:id="function.easter-date" xmlns="http://docbook.org/ns/docbook">
 <refnamediv>
  <refname>easter_date</refname>
  <refpurpose>Get Unix timestamp for local midnight on Easter of a given year</refpurpose>
 </refnamediv>

 <refsect1 role="description">
  &reftitle.description;
  <methodsynopsis>
   <type>int</type><methodname>easter_date</methodname>
   <methodparam choice="opt"><type class="union"><type>int</type><type>null</type></type><parameter>year</parameter><initializer>&null;</initializer></methodparam>
   <methodparam choice="opt"><type>int</type><parameter>mode</parameter><initializer><constant>CAL_EASTER_DEFAULT</constant></initializer></methodparam>
  </methodsynopsis>
  <para>
   Returns the Unix timestamp corresponding to midnight on Easter of
   the given year.
  </para>
  <para>
   The date of Easter Day was defined by the Council of Nicaea in
   AD325 as the Sunday after the first full moon which falls on or
   after the Spring Equinox.  The Equinox is assumed to always fall
   on 21st March, so the calculation reduces to determining the date
   of the full moon and the date of the following Sunday.  The
   algorithm used here was introduced around the year 532 by
   Dionysius Exiguus.  Under the Julian Calendar (for years before
   1753) a simple 19-year cycle is used to track the phases of the
   Moon.  Under the Gregorian Calendar (for years after 1753 -
   devised by Clavius and Lilius, and introduced by Pope Gregory
   XIII in October 1582, and into Britain and its then colonies in
   September 1752) two correction factors are added to make the
   cycle more accurate.
  </para>
 </refsect1>

 <refsect1 role="parameters">
  &reftitle.parameters;
  <para>
   <variablelist>
    <varlistentry>
     <term><parameter>year</parameter></term>
     <listitem>
      <para>
       The year must be a number between 1970 and 2037 for 32-bit systems, or between 1970 and 2,000,000,000 for 64-bit systems.
       If omitted or &null;, defaults to the current year according to the local time.
      </para>
     </listitem>
    </varlistentry>  
    <varlistentry>
     <term><parameter>mode</parameter></term>
     <listitem>
      <para>
       Allows Easter dates to be calculated based on the Julian calendar when set
       to <constant>CAL_EASTER_ALWAYS_JULIAN</constant>. See also <link
        linkend="calendar.constants">calendar constants</link>.
       </para>
     </listitem>
    </varlistentry>  
   </variablelist>
  </para>
 </refsect1>

 <refsect1 role="returnvalues">
  &reftitle.returnvalues;
  <para>
   The easter date as a unix timestamp.
  </para>
 </refsect1>

 <refsect1 role="errors">
  &reftitle.errors;
  <para>
   A <classname>ValueError</classname> is thrown if the year is earlier than 1970 or later than 2037
   when running on a 32-bit system, or later than 2,000,000,000 on a 64-bit system.
  </para>
 </refsect1>

 <refsect1 role="changelog">
  &reftitle.changelog;
  <informaltable>
   <tgroup cols="2">
    <thead>
     <row>
      <entry>&Version;</entry>
      <entry>&Description;</entry>
     </row>
    </thead>
    <tbody>
     <row>
      <entry>8.3.0</entry>
      <entry>
       On 64-bit systems, the <parameter>year</parameter> parameter now accepts values within the range of 1970 to 2,000,000,000.
      </entry>
     </row>
     <row>
      <entry>8.0.0</entry>
      <entry>
       <parameter>year</parameter> is nullable now.
      </entry>
     </row>
     <row>
      <entry>8.0.0</entry>
      <entry>
       A <classname>ValueError</classname> is now thrown when
       <parameter>year</parameter> is outside the allowed range.
       Previously, an <constant>E_WARNING</constant> was raised
       and the function returned &false;.
      </entry>
     </row>
    </tbody>
   </tgroup>
  </informaltable>
 </refsect1>

 <refsect1 role="examples">
  &reftitle.examples;
  <para>
   <example>
    <title><function>easter_date</function> example</title>
    <programlisting role="php">
<![CDATA[
<?php

echo date("M-d-Y", easter_date(1999));        // Apr-04-1999
echo date("M-d-Y", easter_date(2000));        // Apr-23-2000
echo date("M-d-Y", easter_date(2001));        // Apr-15-2001

?>
]]>
    </programlisting>
   </example>

   <example>
    <title>Using <function>easter_date</function> with <classname>DateTime</classname></title>
    <programlisting role="php">
<![CDATA[
<?php

$timestamp = easter_date(2023);

$datetime = new \DateTime();
$datetime->setTimestamp($timestamp);

echo $datetime->format('M-d-Y'); // Apr-09-2023

?>
]]>
    </programlisting>
   </example>
  </para>
 </refsect1>

 <refsect1 role="notes">
  &reftitle.notes;
  <note>
   <para>
    <function>easter_date</function> relies on your system's C library time
    functions, rather than using PHP's internal date and time functions. As a
    consequence, <function>easter_date</function> uses the
    <literal>TZ</literal> environment variable to determine the time zone it
    should operate in, rather than using PHP's
    <link linkend="ini.date.timezone">default time zone</link>, which may
    result in unexpected behaviour when using this function in conjunction
    with other date functions in PHP.
   </para>
   <para>
    As a workaround, you can use the <function>easter_days</function> with
    <classname>DateTime</classname> and <classname>DateInterval</classname> to
    calculate the start of Easter in your PHP time zone as follows:
   </para>
   <informalexample>
    <programlisting role="php">
<![CDATA[
<?php
function get_easter_datetime($year) {
    $base = new DateTime("$year-03-21");
    $days = easter_days($year);

    return $base->add(new DateInterval("P{$days}D"));
}

foreach (range(2012, 2015) as $year) {
    printf("Easter in %d is on %s\n",
           $year,
           get_easter_datetime($year)->format('F j'));
}
?>
]]>
    </programlisting>
    &example.outputs;
    <screen>
<![CDATA[
Easter in 2012 is on April 8
Easter in 2013 is on March 31
Easter in 2014 is on April 20
Easter in 2015 is on April 5
]]>
    </screen>
   </informalexample>
  </note>
 </refsect1>

 <refsect1 role="seealso">
  &reftitle.seealso;
  <para>
   <simplelist>
    <member>
     <function>easter_days</function> for calculating Easter 
     before 1970 or after 2037
    </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
-->