1
0
mirror of https://github.com/php/doc-ru.git synced 2026-03-25 08:12:14 +01:00
Files
archived-doc-ru/reference/datetime/examples.xml
Sergey Panteleev daef8df962 Обнуление тега Reviewed (#364)
[skip-lint]
[skip-spellcheck]
2021-11-16 13:03:53 +03:00

158 lines
5.6 KiB
XML
Raw 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: 8cdc6621f9826d04abc3e50438c010804d7e8683 Maintainer: rjhdby Status: ready -->
<!-- Reviewed: no -->
<chapter xml:id="datetime.examples" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
&reftitle.examples;
<section xml:id="datetime.examples-arithmetic">
<title>Арифметика даты/времени</title>
<para>
В следующих примерах показываются некоторые подводные камни вычислений даты/времени,
относительно переходов на летнее и зимнее время (DST), и месяцев, имеющих разное количество
дней.
</para>
<para>
<example>
<title>DateTimeImmutable::add/sub добавляет интервалы, охватывающие прошедшее время</title>
<simpara>
Добавление PT24H через переход DST приведёт к добавлению 23/25 часов
(для большинства часовых поясов).
</simpara>
<programlisting role="php">
<![CDATA[
<?php
$dt = new DateTimeImmutable("2015-11-01 00:00:00", new DateTimeZone("America/New_York"));
echo "Начало: ", $dt->format("Y-m-d H:i:s P"), PHP_EOL;
$dt = $dt->add(new DateInterval("PT3H"));
echo "Конец: ", $dt->format("Y-m-d H:i:s P"), PHP_EOL;
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
Начало: 2015-11-01 00:00:00 -04:00
Конец: 2015-11-01 02:00:00 -05:00
]]>
</screen>
</example>
</para>
<para>
<example>
<title>DateTimeImmutable::modify и strtotime увеличит или уменьшит значения индивидуальных компонентов</title>
<simpara>
Добавление +24 часов через переход DST добавит точно 24 часов
(вместо учёта перехода на зимнее или летнее время).
</simpara>
<programlisting role="php">
<![CDATA[
<?php
$dt = new DateTimeImmutable("2015-11-01 00:00:00", new DateTimeZone("America/New_York"));
echo "Начало: ", $dt->format("Y-m-d H:i:s P"), PHP_EOL;
$dt = $dt->modify("+24 hours");
echo "Конец: ", $dt->format("Y-m-d H:i:s P"), PHP_EOL;
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
Начало: 2015-11-01 00:00:00 -04:00
Конец: 2015-11-02 00:00:00 -05:00
]]>
</screen>
</example>
</para>
<para>
<example>
<title>Добавление или вычитание времени может уменьшить или увеличить дату</title>
<simpara>
Например, 31 января + 1 месяц вернёт 2 марта (високосный год) или
3 марта (обычный год).
</simpara>
<programlisting role="php">
<![CDATA[
<?php
echo "Обычный год:\n"; // В феврале 28 дней
$dt = new DateTimeImmutable("2015-01-31 00:00:00", new DateTimeZone("America/New_York"));
echo "Начало: ", $dt->format("Y-m-d H:i:s P"), PHP_EOL;
$dt = $dt->modify("+1 month");
echo "Конец: ", $dt->format("Y-m-d H:i:s P"), PHP_EOL;
echo "Високосный год:\n"; // В феврале 29 дней
$dt = new DateTimeImmutable("2016-01-31 00:00:00", new DateTimeZone("America/New_York"));
echo "Начало: ", $dt->format("Y-m-d H:i:s P"), PHP_EOL;
$dt = $dt->modify("+1 month");
echo "Конец: ", $dt->format("Y-m-d H:i:s P"), PHP_EOL;
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
Обычный год:
Начало: 2015-01-31 00:00:00 -05:00
Конец: 2015-03-03 00:00:00 -05:00
Високосный год:
Начало: 2016-01-31 00:00:00 -05:00
Конец: 2016-03-02 00:00:00 -05:00
]]>
</screen>
<simpara>
Для получения последнего дня следующего месяца (то есть чтобы предотвратить
переполнение) существует директива <literal>last day of</literal>.
</simpara>
<programlisting role="php">
<![CDATA[
<?php
echo "Обычный год:\n"; // Февраль содержит 28 дней
$dt = new DateTimeImmutable("2015-01-31 00:00:00", new DateTimeZone("America/New_York"));
echo "Начало: ", $dt->format("Y-m-d H:i:s P"), PHP_EOL;
$dt = $dt->modify("last day of next month");
echo "Конец: ", $dt->format("Y-m-d H:i:s P"), PHP_EOL;
echo "Високосный год:\n"; // Февраль содержит 29 дней
$dt = new DateTimeImmutable("2016-01-31 00:00:00", new DateTimeZone("America/New_York"));
echo "Начало: ", $dt->format("Y-m-d H:i:s P"), PHP_EOL;
$dt = $dt->modify("last day of next month");
echo "Конец: ", $dt->format("Y-m-d H:i:s P"), PHP_EOL;
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
Обычный год:
Начало: 2015-01-31 00:00:00 -05:00
Конец: 2015-02-28 00:00:00 -05:00
Високосный год:
Начало: 2016-01-31 00:00:00 -05:00
Конец: 2016-02-29 00:00:00 -05:00
]]>
</screen>
</example>
</para>
</section>
</chapter>
<!-- 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
-->