-
Notifications
You must be signed in to change notification settings - Fork 82
Expand file tree
/
Copy patheaster-date.xml
More file actions
239 lines (224 loc) · 7.63 KB
/
easter-date.xml
File metadata and controls
239 lines (224 loc) · 7.63 KB
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
237
238
239
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 7706c4d3877d401e26e7f09b17f765337dd4405c Maintainer: hirokawa Status: ready -->
<!-- Credits: mumumu -->
<refentry xml:id="function.easter-date" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>easter_date</refname>
<refpurpose>指定した年におけるローカルの復活祭の真夜中のUnix時を得る</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>
指定した年yearにおける復活祭の真夜中のUnix時を返します。
</para>
<para>
復活祭の日付は、西暦325年の Nicaea 会議で春分の日の後の
最初の満月の後の日曜日として定められました。
満月とその次の日曜日の日付の計算を簡単にするために
春分の日は常に3月21日になるとして計算されます。
ここで用いるアルゴリズムは、532年頃、Dionysius Exiguus により
導出されたものです。(1753年より前の年に関して)ユリウス暦の元では
月の周期を追うために簡単な19年周期が用いられます。グレゴリウス暦
(1753年以降。この暦は、ClaviusとLiliusにより考案され、
教皇グレゴリウス13世により1582年10月に導入、イギリス及びその植民地に
1752年9月に導入された。)
のもとで、二つの補正係数が周期をより正確に作成するために追加されました。
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>year</parameter></term>
<listitem>
<para>
年の値。32ビットのシステムでは、
1970 から 2037 までである必要があります。
64ビットのシステムでは、
1970 から 2,000,000,000 までである必要があります。
省略した場合、もしくは &null; の場合は、
デフォルトとしてローカルタイムにおける現在の年を使います。
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>mode</parameter></term>
<listitem>
<para>
<constant>CAL_EASTER_ALWAYS_JULIAN</constant> を設定すると、
ユリウス暦のカレンダをベースにして復活祭の日付が計算できます。
<link
linkend="calendar.constants">calendar の定数</link> を参照ください。
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
復活祭の日を Unix タイムスタンプで返します。
</para>
</refsect1>
<refsect1 role="errors">
&reftitle.errors;
<para>
32ビットのシステムでは、year の値が 1970 より前か 2037 より後の場合、
<classname>ValueError</classname> がスローされます。
64ビットのシステムでは、year の値が 1970 より前か 2,000,000,000 より後の場合、
<classname>ValueError</classname> がスローされます。
</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>
64ビットのシステムでは、
<parameter>year</parameter> の値として
1970 から 2,000,000,000 までの値を受け入れるようになりました。
</entry>
</row>
<row>
<entry>8.0.0</entry>
<entry>
<parameter>year</parameter> は、nullable になりました。
</entry>
</row>
<row>
<entry>8.0.0</entry>
<entry>
<parameter>year</parameter> が範囲外の値の場合、
<classname>ValueError</classname> がスローされるようになりました。
これより前のバージョンでは、
<constant>E_WARNING</constant> が発生して &false; を返していました。
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title><function>easter_date</function> の例</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><function>easter_date</function> を <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> は、システムの C ライブラリの関数を利用します。
PHP 組み込みの日付・時刻関数を使うわけではなりません。
つまり、<function>easter_date</function> が利用するタイムゾーンは環境変数
<literal>TZ</literal> の値であり、PHP の
<link linkend="ini.date.timezone">デフォルトのタイムゾーン</link>は考慮しません。
その結果、PHP の他の日付関数と組み合わせて使ったときに予期せぬ結果になる可能性があります。
</para>
<para>
回避策として、<function>easter_days</function> を
<classname>DateTime</classname> や <classname>DateInterval</classname>
と組み合わせて使えば、PHP で設定したタイムゾーンにおける復活祭の開始時刻を算出できます。
</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>
1970年以前または2037年以降の復活祭の計算に関しては、
<function>easter_days</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
-->