1
0
mirror of https://github.com/php/doc-ru.git synced 2026-03-24 15:52:13 +01:00
Files
2026-01-26 19:59:00 +03:00

323 lines
11 KiB
XML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 0cf48a5a4869bd8b42f84e7032076756cde6a474 Maintainer: aur Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="dateperiod.construct" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv>
<refname>DatePeriod::__construct</refname>
<refpurpose>Создаёт новый объект DatePeriod</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<constructorsynopsis role="DatePeriod">
<modifier>public</modifier> <methodname>DatePeriod::__construct</methodname>
<methodparam><type>DateTimeInterface</type><parameter>start</parameter></methodparam>
<methodparam><type>DateInterval</type><parameter>interval</parameter></methodparam>
<methodparam><type>int</type><parameter>recurrences</parameter></methodparam>
<methodparam choice="opt"><type>int</type><parameter>options</parameter><initializer>0</initializer></methodparam>
</constructorsynopsis>
<constructorsynopsis role="DatePeriod">
<modifier>public</modifier> <methodname>DatePeriod::__construct</methodname>
<methodparam><type>DateTimeInterface</type><parameter>start</parameter></methodparam>
<methodparam><type>DateInterval</type><parameter>interval</parameter></methodparam>
<methodparam><type>DateTimeInterface</type><parameter>end</parameter></methodparam>
<methodparam choice="opt"><type>int</type><parameter>options</parameter><initializer>0</initializer></methodparam>
</constructorsynopsis>
<warning>
<simpara>
Этот вариант конструктора устарел:
</simpara>
<constructorsynopsis role="DatePeriod">
<modifier>public</modifier> <methodname>DatePeriod::__construct</methodname>
<methodparam><type>string</type><parameter>isostr</parameter></methodparam>
<methodparam choice="opt"><type>int</type><parameter>options</parameter><initializer>0</initializer></methodparam>
</constructorsynopsis>
<simpara>
Вместо этого следует использовать статический
фабричный метод <methodname>DatePeriod::createFromISO8601String</methodname>.
</simpara>
</warning>
<para>
Создаёт новый объект DatePeriod.
</para>
<para>
Объекты <classname>DatePeriod</classname> можно использовать в качестве итератора
для генерации ряда объектов <classname>DateTimeImmutable</classname> или <classname>DateTime</classname>
из даты <parameter>start</parameter>, <parameter>interval</parameter> и <parameter>end</parameter>
или числа <parameter>recurrences</parameter>.
</para>
<para>
Класс возвращаемых объектов эквивалентен классу-родителю <classname>DateTimeImmutable</classname>
или <classname>DateTime</classname> объекта <parameter>start</parameter>.
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>start</parameter></term>
<listitem>
<para>
Начальная дата. По умолчанию включается в набор результатов.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>interval</parameter></term>
<listitem>
<para>
Интервал.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>recurrences</parameter></term>
<listitem>
<para>
Количество повторений. Число возвращаемых результатов на единицу больше этого,
так как дата начала включается в набор результатов по умолчанию.
Должно быть больше, чем <literal>0</literal>.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>end</parameter></term>
<listitem>
<para>
Конечная дата. По умолчанию исключается из набора результатов.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>isostr</parameter></term>
<listitem>
<para>
Подмножество, содержащее интервал согласно <link
xlink:href="&url.iso-8601.repeating_intervals;">спецификации ISO 8601</link>.
</para>
<para>
Примерами некоторых особенностей спецификации интервалов ISO 8601,
которые PHP не поддерживает, являются:
</para>
<orderedlist>
<listitem>
<simpara>
нулевые вхождения (<literal>R0/</literal>)
</simpara>
</listitem>
<listitem>
<simpara>
смещение времени, отличное от UTC (<literal>Z</literal>), например, <literal>+02:00</literal>.
</simpara>
</listitem>
</orderedlist>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>options</parameter></term>
<listitem>
<para>
Битовое поле, которое можно использовать для управления определённым поведением с начальной и конечной датами.
</para>
<para>
Исключить начальную дату внутри периода из набора повторяющихся дат можно
с помощью константы <constant>DatePeriod::EXCLUDE_START_DATE</constant>.
</para>
<para>
Включить конечную дату внутри периода в набор повторяющихся дат можно
с помощью константы <constant>DatePeriod::INCLUDE_END_DATE</constant>.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="errors">
&reftitle.errors;
<para>
Когда значение параметра <parameter>isostr</parameter>
не может быть разобрано анализатором как допустимый стандартом ISO 8601 формат,
выбрасывается исключение <classname>DateMalformedPeriodStringException</classname>.
До PHP 8.3 выбрасывалось исключение <exceptionname>Exception</exceptionname>.
</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>
Теперь вместо исключения <exceptionname>Exception</exceptionname>
выбрасывается исключение <exceptionname>DateMalformedPeriodStringException</exceptionname>.
</entry>
</row>
<row>
<entry>8.2.0</entry>
<entry>
Добавлена константа <constant>DatePeriod::INCLUDE_END_DATE</constant>.
</entry>
</row>
<row>
<entry>7.2.19, 7.3.6, 7.4.0</entry>
<entry>
<parameter>recurrences</parameter> должен быть больше <literal>0</literal>.
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>Пример использования DatePeriod</title>
<programlisting role="php">
<![CDATA[
<?php
$start = new DateTime('2012-07-01');
$interval = new DateInterval('P7D');
$end = new DateTime('2012-07-31');
$recurrences = 4;
$iso = 'R4/2012-07-01T00:00:00Z/P7D';
// Эти периоды эквивалентны.
$period = new DatePeriod($start, $interval, $recurrences);
$period = new DatePeriod($start, $interval, $end);
$period = new DatePeriod($iso);
// При переборе экземпляра DatePeriod в цикле будут отображены все отобранные даты
// периода.
foreach ($period as $date) {
echo $date->format('Y-m-d')."\n";
}
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
Deprecated: Calling DatePeriod::__construct(string $isostr, int $options = 0) is deprecated, use DatePeriod::createFromISO8601String() instead in script on line 11
2012-07-01
2012-07-08
2012-07-15
2012-07-22
2012-07-29
]]>
</screen>
</example>
</para>
<para>
<example>
<title>Пример использования DatePeriod с <constant>DatePeriod::EXCLUDE_START_DATE</constant></title>
<programlisting role="php">
<![CDATA[
<?php
$start = new DateTime('2012-07-01');
$interval = new DateInterval('P7D');
$end = new DateTime('2012-07-31');
$period = new DatePeriod($start, $interval, $end,
DatePeriod::EXCLUDE_START_DATE);
// При переборе экземпляра DatePeriod в цикле будут отображены все отобранные даты
// периода.
// Однако в этом случае 2012-07-01 не будет отображена.
foreach ($period as $date) {
echo $date->format('Y-m-d')."\n";
}
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
2012-07-08
2012-07-15
2012-07-22
2012-07-29
]]>
</screen>
</example>
</para>
<para>
<example>
<title>Пример использования DatePeriod, показывающий все последние четверги в году</title>
<programlisting role="php">
<![CDATA[
<?php
$begin = new DateTime('2021-12-31');
$end = new DateTime('2022-12-31 23:59:59');
$interval = DateInterval::createFromDateString('last thursday of next month');
$period = new DatePeriod($begin, $interval, $end, DatePeriod::EXCLUDE_START_DATE);
foreach ($period as $dt) {
echo $dt->format('l Y-m-d'), "\n";
}
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
Thursday 2022-01-27
Thursday 2022-02-24
Thursday 2022-03-31
Thursday 2022-04-28
Thursday 2022-05-26
Thursday 2022-06-30
Thursday 2022-07-28
Thursday 2022-08-25
Thursday 2022-09-29
Thursday 2022-10-27
Thursday 2022-11-24
Thursday 2022-12-29
]]>
</screen>
</example>
</para>
</refsect1>
<refsect1 role="notes">
&reftitle.notes;
<simpara>
Несвязное количество повторений, определённые в секции 4.5 ISO 8601
"Recurring time interval", не поддерживается, то есть
ни передача <literal>"R/..."</literal> в <parameter>isostr</parameter>, ни
&null; в <parameter>end</parameter>, не будут работать.
</simpara>
</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
-->