1
0
mirror of https://github.com/php/doc-ru.git synced 2026-03-24 07:42:22 +01:00
Files
archived-doc-ru/reference/datetime/examples.xml
2026-01-26 19:59:00 +03:00

154 lines
5.6 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: cd8b964b8566801265f0d287db6eb651f93be950 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
-->