Files

256 lines
8.4 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: 52222422c00aba192c5f7fed3c4efdaa870e799e Maintainer: tmn Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="datetime.diff" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv>
<refname>DateTimeInterface::diff</refname>
<refname>DateTimeImmutable::diff</refname>
<refname>DateTime::diff</refname>
<refname>date_diff</refname>
<refpurpose>Возвращает разницу между двумя объектами DateTime</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<para>&style.oop;</para>
<methodsynopsis role="DateTimeInterface">
<modifier>public</modifier> <type>DateInterval</type><methodname>DateTimeInterface::diff</methodname>
<methodparam><type>DateTimeInterface</type><parameter>targetObject</parameter></methodparam>
<methodparam choice="opt"><type>bool</type><parameter>absolute</parameter><initializer>&false;</initializer></methodparam>
</methodsynopsis>
<methodsynopsis role="DateTimeImmutable">
<modifier>public</modifier> <type>DateInterval</type><methodname>DateTimeImmutable::diff</methodname>
<methodparam><type>DateTimeInterface</type><parameter>targetObject</parameter></methodparam>
<methodparam choice="opt"><type>bool</type><parameter>absolute</parameter><initializer>&false;</initializer></methodparam>
</methodsynopsis>
<methodsynopsis role="DateTime">
<modifier>public</modifier> <type>DateInterval</type><methodname>DateTime::diff</methodname>
<methodparam><type>DateTimeInterface</type><parameter>targetObject</parameter></methodparam>
<methodparam choice="opt"><type>bool</type><parameter>absolute</parameter><initializer>&false;</initializer></methodparam>
</methodsynopsis>
<para>&style.procedural;</para>
<methodsynopsis>
<type>DateInterval</type><methodname>date_diff</methodname>
<methodparam><type>DateTimeInterface</type><parameter>baseObject</parameter></methodparam>
<methodparam><type>DateTimeInterface</type><parameter>targetObject</parameter></methodparam>
<methodparam choice="opt"><type>bool</type><parameter>absolute</parameter><initializer>&false;</initializer></methodparam>
</methodsynopsis>
<para>
Метод возвращает разницу между двумя объектами <classname>DateTimeInterface</classname>.
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<variablelist>
<varlistentry>
<term><parameter>datetime</parameter></term>
<listitem>
<para>
Дата, с которой требуется сравнение.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>absolute</parameter></term>
<listitem>
<para>
Логическое значение, которое определяет, требуется ли принудительно переводить интервал в абсолютную величину.
</para>
</listitem>
</varlistentry>
</variablelist>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Метод возвращает объект <classname>DateInterval</classname>, который представляет
разницу между двумя датами.
</para>
<para>
Параметр <parameter>absolute</parameter> влияет только
на свойство <parameter>invert</parameter>
объекта <classname>DateInterval</classname>.
</para>
<para>
Конкретнее — метод возвращает значение, которое представляет интервал времени,
который требуется применить к исходному объекту <parameter>$this</parameter> или <parameter>$originObject</parameter>,
чтобы получить целевой объект <parameter>$targetObject</parameter>.
Процесс обратим не всегда.
</para>
<para>
Метод учитывает смену часовых поясов и поэтому иногда возвращает интервал
<literal>24 hours and 30 minutes</literal>, как в одном из примеров.
Сначала объекты <parameter>$this</parameter> или <parameter>$baseObject</parameter>
и <parameter>$targetObject</parameter> преобразовывают к часовому поясу UTC,
когда требуется рассчитывать абсолютное время.
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<example>
<title>
Пример использования метода <methodname>DateTimeInterface::diff</methodname> с диапазоном дат
</title>
<para>
Значение, которое возвращает метод, — точное количество времени, которое требуется
для перехода от времени объекта <parameter>$this</parameter> ко времени объекта <parameter>$targetObject</parameter>.
Поэтому сравнение 1 января с 31 декабря возвращает 364 дня, а не 365 дней
(для невисокосных годов).
</para>
<programlisting role="php">
<![CDATA[
<?php
$originalTime = new DateTimeImmutable("2023-01-01 UTC");
$targetTime = new DateTimeImmutable("2023-12-31 UTC");
$interval = $originalTime->diff($targetTime);
echo "Полных дней: ", $interval->format("%a"), "\n";
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
Полных дней: 364
]]>
</screen>
</example>
<example>
<title>Пример использования метода <function>DateTimeImmutable::diff</function></title>
<para>&style.oop;</para>
<programlisting role="php">
<![CDATA[
<?php
$origin = new DateTimeImmutable('2009-10-11');
$target = new DateTimeImmutable('2009-10-13');
$interval = $origin->diff($target);
echo $interval->format('%R%a дней');
?>
]]>
</programlisting>
<para>&style.procedural;</para>
<programlisting role="php">
<![CDATA[
<?php
$origin = date_create('2009-10-11');
$target = date_create('2009-10-13');
$interval = date_diff($origin, $target);
echo $interval->format('%R%a дней');
?>
]]>
</programlisting>
&examples.outputs;
<screen>
<![CDATA[
+2 days
]]>
</screen>
</example>
<example>
<title>
Пример использования метода <methodname>DateTimeInterface::diff</methodname>
при переходе на летнее время
</title>
<programlisting role="php">
<![CDATA[
<?php
$originalTime = new DateTimeImmutable("2021-10-30 09:00:00 Europe/London");
$targetTime = new DateTimeImmutable("2021-10-31 08:30:00 Europe/London");
$interval = $originalTime->diff($targetTime);
echo $interval->format("%H:%I:%S (Полных дней: %a)"), "\n";
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
24:30:00 (Полных дней: 0)
]]>
</screen>
</example>
<example>
<title>Сравнение объектов <classname>DateTime</classname></title>
<note>
<para>
Объекты <classname>DateTimeImmutable</classname> и
<classname>DateTime</classname> можно сравнивать
<link linkend="language.operators.comparison">операторами сравнения</link>.
</para>
</note>
<programlisting role="php">
<![CDATA[
<?php
$date1 = new DateTime("now");
$date2 = new DateTime("tomorrow");
var_dump($date1 == $date2);
var_dump($date1 < $date2);
var_dump($date1 > $date2);
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
bool(false)
bool(true)
bool(false)
]]>
</screen>
</example>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<simplelist>
<member><function>DateInterval::format</function></member>
<member><function>DateTime::add</function></member>
<member><function>DateTime::sub</function></member>
</simplelist>
</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
-->