1
0
mirror of https://github.com/php/doc-zh.git synced 2026-03-25 15:42:15 +01:00
Files
2025-11-02 17:54:34 +08:00

229 lines
7.0 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"?>
<!-- $Revision$ -->
<!-- EN-Revision: 3a8c3e77df070a046c9d5b56b68926ca2d7e5ee3 Maintainer: mowangjuanzi Status: ready -->
<!-- CREDITS: Luffy -->
<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> 参数只影响 <classname>DateInterval</classname> 对象的
<parameter>invert</parameter> 属性。
</para>
<para>
返回更具体的表示应用于原始对象(<parameter>$this</parameter>
<parameter>$originObject</parameter>)到达 <parameter>$targetObject</parameter>
的时钟时间间隔的值。该过程始终不可逆。
</para>
<para>
该方法知道 DST 转换,因此可以根据示例返回 <literal>24 小时 30
分钟</literal>的时间间隔。如果想使用绝对时间计算,则需要先将
<parameter>$this</parameter>/<parameter>$baseObject</parameter>
<parameter>$targetObject</parameter> 都转换为 UTC。
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<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 days');
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
+2 days
]]>
</screen>
<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 days');
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
+2 days
]]>
</screen>
</example>
<example>
<title>DST 转换期间的 <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 (Full days: %a)"), "\n";
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
24:30:00 (Full days: 0)
]]>
</screen>
</example>
<example>
<title><methodname>DateTimeInterface::diff</methodname> range</title>
<para>
该方法返回的值是从 <parameter>$this</parameter> 到达 <parameter>$targetObject</parameter>
所需要的精确时间。因此,将 1 月 1 日与 12 月 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 "Full days: ", $interval->format("%a"), "\n";
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
Full days: 364
]]>
</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
-->