mirror of
https://github.com/php/doc-ru.git
synced 2026-03-25 16:22:18 +01:00
1213 lines
52 KiB
XML
1213 lines
52 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
||
<!-- EN-Revision: ac83abe55f4da019036de5ec14400d674fa3f9f5 Maintainer: aur Status: ready -->
|
||
<!-- Reviewed: no -->
|
||
<chapter xml:id="datetime.formats" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||
<title>Допустимые форматы даты и времени</title>
|
||
|
||
<para>
|
||
Раздел описывает разные форматы в BNF-подобном синтаксисе, которые принимает парсер:
|
||
<classname>DateTimeImmutable</classname>, <classname>DateTime</classname>,
|
||
<function>date_create_immutable</function>,
|
||
<function>date_create</function>, <function>date_parse</function> и
|
||
<function>strtotime</function>. Форматы сгруппированы
|
||
по разделам. В большинстве случаев форматы из разных разделов, разделённые
|
||
пробелом, запятой или точкой, могут использоваться в одной и той же строке даты и времени. Для каждого
|
||
из поддерживаемых форматов приведены один или несколько примеров, а также
|
||
описание формата. Символы в одинарных кавычках нечувствительны к регистру
|
||
(<literal>'t'</literal> эквивалентно как <literal>t</literal>, так и <literal>T</literal>),
|
||
символы в двойных кавычках чувствительны к регистру
|
||
(<literal>"T"</literal> означает только <literal>T</literal>).
|
||
</para>
|
||
<para>
|
||
Чтобы отформатировать объекты <classname>DateTimeImmutable</classname> и <classname>DateTime</classname>,
|
||
обратитесь к документации метода <function>DateTimeInterface::format</function>.
|
||
</para>
|
||
|
||
<para>
|
||
Следует принять во внимание общий свод правил.
|
||
</para>
|
||
<orderedlist>
|
||
<listitem>
|
||
<simpara>
|
||
Парсер допускает для каждой единицы измерения (год, месяц, день, час, минута, секунда) полный диапазон значений.
|
||
Для года это всего 4 цифры, для месяца — 0-12, дня — 0-31, для часа — 0-24, а для минуты — 0-59.
|
||
</simpara>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara>
|
||
Для секунд допускается значение 60, так как иногда строки даты с этой прыгающей секундой действительно появляются.
|
||
Но PHP реализует время Unix, где "60" не является допустимым числом секунд и поэтому происходит переполнение.
|
||
</simpara>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara>
|
||
Функция <function>strtotime</function> возвращает &false;, если какое-либо число находится вне диапазонов,
|
||
а конструктор <function>DateTimeImmutable::__construct</function> выбрасывает исключение.
|
||
</simpara>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara>
|
||
Если строка содержит дату, все элементы времени обнуляются до 0.
|
||
</simpara>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara>
|
||
Все менее значимые элементы времени сбрасываются до 0,
|
||
если в данной строке присутствует какая-либо часть времени.
|
||
</simpara>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara>
|
||
Парсер не делает никаких проверок, чтобы сделать его быстрее (и более универсальным).
|
||
</simpara>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara>
|
||
Помимо правил для отдельных элементов времени, синтаксический анализатор
|
||
понимает и более специфические <link linkend="datetime.formats.compound">комбинированные форматы</link>,
|
||
например, разбор меток времени Unix (<literal>@1690388256</literal>)
|
||
и дат недели в формате ISO (<literal>2008-W28-3</literal>).
|
||
</simpara>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
Существует дополнительная проверка, если указана недействительная дата:
|
||
<informalexample>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
|
||
$res = date_parse("2015-09-31");
|
||
var_dump($res["warnings"]);
|
||
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
&example.outputs;
|
||
<screen>
|
||
<![CDATA[
|
||
array(1) {
|
||
[11] =>
|
||
string(27) "The parsed date was invalid"
|
||
}
|
||
]]>
|
||
</screen>
|
||
</informalexample>
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
Крайние случаи уже можно обработать, для этого необходимо вызывать
|
||
метод <function>DateTimeImmutable::createFromFormat</function>,
|
||
предоставляя правильный формат.
|
||
<informalexample>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
|
||
$res = DateTimeImmutable::createFromFormat("Y-m-d", "2015-09-34");
|
||
var_dump($res);
|
||
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
&example.outputs;
|
||
<screen>
|
||
<![CDATA[
|
||
object(DateTimeImmutable)#1 (3) {
|
||
["date"]=>
|
||
string(26) "2015-10-04 17:24:43.000000"
|
||
["timezone_type"]=>
|
||
int(3)
|
||
["timezone"]=>
|
||
string(13) "Europe/London"
|
||
}
|
||
]]>
|
||
</screen>
|
||
</informalexample>
|
||
</para>
|
||
</listitem>
|
||
</orderedlist>
|
||
|
||
<!--Time Formats: {{{-->
|
||
<sect1 annotations="chunk:false" xml:id="datetime.formats.time">
|
||
<title>Форматы времени</title>
|
||
<para>
|
||
Эта страница описывает форматы даты и времени в BNF-подобном синтаксисе, которые понимает парсер функций:
|
||
<classname>DateTimeImmutable</classname>, <classname>DateTime</classname>,
|
||
<function>date_create</function>,
|
||
<function>date_create_immutable</function> и
|
||
<function>strtotime</function>.
|
||
</para>
|
||
<para>
|
||
Чтобы отформатировать объекты <classname>DateTimeImmutable</classname> и <classname>DateTime</classname>,
|
||
обратитесь к документации метода <function>DateTimeInterface::format</function>.
|
||
</para>
|
||
|
||
<table>
|
||
<title>Используемые символы</title>
|
||
<tgroup cols="3">
|
||
<thead>
|
||
<row>
|
||
<entry>Описание</entry>
|
||
<entry>Формат</entry>
|
||
<entry>Примеры</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry><literal>frac</literal> (дробная часть)</entry>
|
||
<entry>. [0-9]+</entry>
|
||
<entry>".21342", ".85"</entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>hh</literal> (часы в 12-часовом формате)</entry>
|
||
<entry>"0"?[1-9] | "1"[0-2]</entry>
|
||
<entry>"04", "7", "12"</entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>HH</literal> (часы в 24-часовом формате)</entry>
|
||
<entry>[01][0-9] | "2"[0-4]</entry>
|
||
<entry>"04", "07", "19"</entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>meridian</literal> (Ante meridiem или Post meridiem)</entry>
|
||
<entry>[AaPp] .? [Mm] .? [\0\t ]</entry>
|
||
<entry>"A.m.", "pM", "am."</entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>MM</literal> (минуты)</entry>
|
||
<entry>[0-5][0-9]</entry>
|
||
<entry>"00", "12", "59"</entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>II</literal> (секунды)</entry>
|
||
<entry>[0-5][0-9]</entry>
|
||
<entry>"00", "12", "59"</entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>space</literal> (символ пробела или табуляции)</entry>
|
||
<entry>[ \t]</entry>
|
||
<entry></entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>tz</literal> (часовой пояс)</entry>
|
||
<entry>"("? [A-Za-z]{1,6} ")"? | [A-Z][a-z]+([_/][A-Z][a-z]+)+</entry>
|
||
<entry>"CEST", "Europe/Amsterdam", "America/Indiana/Knox"</entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>tzcorrection</literal> (числовое значение смещения часового пояса)</entry>
|
||
<entry>"GMT"? [+-] <literal>hh</literal> ":"? <literal>MM</literal>?</entry>
|
||
<entry>"+0400", "GMT-07:00", "-07:00"</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</table>
|
||
|
||
<table>
|
||
<title>12-часовой формат</title>
|
||
<tgroup cols="3">
|
||
<thead>
|
||
<row>
|
||
<entry>Описание</entry>
|
||
<entry>Формат</entry>
|
||
<entry>Примеры</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry>Только часы (с Ante meridiem или Post meridiem)</entry>
|
||
<entry><literal>hh</literal> <literal>space</literal>? <literal>meridian</literal></entry>
|
||
<entry>"4 am", "5PM"</entry>
|
||
</row>
|
||
<row>
|
||
<entry>Часы и минуты (с <literal>Ante meridiem</literal> или <literal>Post meridiem</literal>)</entry>
|
||
<entry><literal>hh</literal> [.:] <literal>MM</literal> <literal>space</literal>? <literal>meridian</literal></entry>
|
||
<entry>"4:08 am", "7:19P.M."</entry>
|
||
</row>
|
||
<row>
|
||
<entry>Часы, минуты и секунды (с <literal>Ante meridiem</literal> или <literal>Post meridiem</literal>)</entry>
|
||
<entry><literal>hh</literal> [.:] <literal>MM</literal> [.:] <literal>II</literal> <literal>space</literal>? <literal>meridian</literal></entry>
|
||
<entry>"4:08:37 am", "7:19:19P.M."</entry>
|
||
</row>
|
||
<row>
|
||
<entry>MS SQL (Часы, минуты, секунды и дробная часть с Ante meridiem или Post meridiem)</entry>
|
||
<entry><literal>hh</literal> ":" <literal>MM</literal> ":" <literal>II</literal> [.:] [0-9]+ <literal>meridian</literal></entry>
|
||
<entry>"4:08:39:12313am"</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</table>
|
||
|
||
<table>
|
||
<title>24-часовой формат</title>
|
||
<tgroup cols="3">
|
||
<thead>
|
||
<row>
|
||
<entry>Описание</entry>
|
||
<entry>Формат</entry>
|
||
<entry>Примеры</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry>Часы и минуты</entry>
|
||
<entry>'t'? <literal>HH</literal> [.:] <literal>MM</literal></entry>
|
||
<entry>"04:08", "19.19", "T23:43"</entry>
|
||
</row>
|
||
<row>
|
||
<entry>Часы и минуты (без двоеточия-разделителя)</entry>
|
||
<entry>'t'? <literal>HH</literal> <literal>MM</literal></entry>
|
||
<entry>"0408", "t1919", "T2343"</entry>
|
||
</row>
|
||
<row>
|
||
<entry>Часы, минуты и секунды</entry>
|
||
<entry>'t'? <literal>HH</literal> [.:] <literal>MM</literal> [.:] <literal>II</literal></entry>
|
||
<entry>"04.08.37", "t19:19:19"</entry>
|
||
</row>
|
||
<row>
|
||
<entry>Часы, минуты и секунды (без двоеточия-разделителя)</entry>
|
||
<entry>'t'? <literal>HH</literal> <literal>MM</literal> <literal>II</literal></entry>
|
||
<entry>"040837", "T191919"</entry>
|
||
</row>
|
||
<row>
|
||
<entry>Часы, минуты, секунды и часовой пояс</entry>
|
||
<entry>'t'? <literal>HH</literal> [.:] <literal>MM</literal> [.:] <literal>II</literal> <literal>space</literal>? ( <literal>tzcorrection</literal> | <literal>tz</literal> )</entry>
|
||
<entry>"040837CEST", "T191919-0700"</entry>
|
||
</row>
|
||
<row>
|
||
<entry>Часы, минуты, секунды и дробная часть</entry>
|
||
<entry>'t'? <literal>HH</literal> [.:] <literal>MM</literal> [.:] <literal>II</literal> <literal>frac</literal></entry>
|
||
<entry>"04.08.37.81412", "19:19:19.532453"</entry>
|
||
</row>
|
||
<row>
|
||
<entry>Сведения о часовом поясе</entry>
|
||
<entry><literal>tz</literal> | <literal>tzcorrection</literal></entry>
|
||
<entry>"CEST", "Europe/Amsterdam", "+0430", "GMT-06:00"</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</table>
|
||
</sect1>
|
||
<!--}}}-->
|
||
|
||
<!--Date Formats: {{{-->
|
||
<sect1 annotations="chunk:false" xml:id="datetime.formats.date">
|
||
<title>Форматы даты</title>
|
||
|
||
<para>
|
||
Эта страница описывает форматы даты в BNF-подобном синтаксисе, которые понимает парсер функций:
|
||
<classname>DateTimeImmutable</classname>, <classname>DateTime</classname>,
|
||
<function>date_create</function>,
|
||
<function>date_create_immutable</function> и
|
||
<function>strtotime</function>.
|
||
</para>
|
||
<para>
|
||
Чтобы отформатировать объекты <classname>DateTimeImmutable</classname> и <classname>DateTime</classname>,
|
||
обратитесь к документации метода <function>DateTimeInterface::format</function>.
|
||
</para>
|
||
|
||
<table>
|
||
<title>Используемые символы</title>
|
||
<tgroup cols="3">
|
||
<thead>
|
||
<row>
|
||
<entry>Описание</entry>
|
||
<entry>Формат</entry>
|
||
<entry>Примеры</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry><literal>daysuf</literal> (суффикс порядкового числительного дня месяца)</entry>
|
||
<entry>"st" | "nd" | "rd" | "th"</entry>
|
||
<entry></entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>dd</literal> (день месяца без ведущих нулей)</entry>
|
||
<entry>([0-2]?[0-9] | "3"[01]) <literal>daysuf</literal>?</entry>
|
||
<entry>"7th", "22nd", "31"</entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>DD</literal> (день месяца, 2 цифры с ведущим нулём)</entry>
|
||
<entry>"0" [0-9] | [1-2][0-9] | "3" [01]</entry>
|
||
<entry>"07", "31"</entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>m</literal> (полное или сокращённое название месяца)</entry>
|
||
<entry>'january' | 'february' | 'march' | 'april' | 'may' | 'june' |
|
||
'july' | 'august' | 'september' | 'october' | 'november' | 'december' |
|
||
'jan' | 'feb' | 'mar' | 'apr' | 'may' | 'jun' | 'jul' | 'aug' | 'sep' |
|
||
'sept' | 'oct' | 'nov' | 'dec' | "I" | "II" | "III" | "IV" | "V" | "VI"
|
||
| "VII" | "VIII" | "IX" | "X" | "XI" | "XII"</entry>
|
||
<entry></entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>M</literal> (сокращённое название месяца)</entry>
|
||
<entry>'jan' | 'feb' | 'mar' | 'apr' | 'may' | 'jun' | 'jul' | 'aug' |
|
||
'sep' | 'sept' | 'oct' | 'nov' | 'dec'</entry>
|
||
<entry></entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>mm</literal> (порядковый номер месяца)</entry>
|
||
<entry>"0"? [0-9] | "1"[0-2]</entry>
|
||
<entry>"0", "04", "7", "12"</entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>MM</literal> (порядковый номер месяца, 2 цифры с ведущим нулём)</entry>
|
||
<entry>"0" [0-9] | "1"[0-2]</entry>
|
||
<entry>"00", "04", "07", "12"</entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>y</literal> (порядковый номер года)</entry>
|
||
<entry>[0-9]{1,4}</entry>
|
||
<entry>"00", "78", "08", "8", "2008"</entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>yy</literal> (порядковый номер года, 2 цифры)</entry>
|
||
<entry>[0-9]{2}</entry>
|
||
<entry>"00", "08", "78"</entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>YY</literal> (порядковый номер года, 4 цифры)</entry>
|
||
<entry>[0-9]{4}</entry>
|
||
<entry>"2000", "2008", "1978"</entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>YYY</literal></entry>
|
||
<entry>[0-9]{5,19}</entry>
|
||
<entry>"81412", "20192"</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</table>
|
||
|
||
<table>
|
||
<title>Региональные нотации</title>
|
||
<tgroup cols="3">
|
||
<thead>
|
||
<row>
|
||
<entry>Описание</entry>
|
||
<entry>Формат</entry>
|
||
<entry>Примеры</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry>Месяц и день в американской нотации</entry>
|
||
<entry><literal>mm</literal> "/" <literal>dd</literal></entry>
|
||
<entry>"5/12", "10/27"</entry>
|
||
</row>
|
||
<row>
|
||
<entry>Месяц, день и год в американской нотации</entry>
|
||
<entry><literal>mm</literal> "/" <literal>dd</literal> "/" <literal>y</literal></entry>
|
||
<entry>"12/22/78", "1/17/2006", "1/17/6"</entry>
|
||
</row>
|
||
<row>
|
||
<entry>4 цифры года, месяц и день со слешем-разделителем</entry>
|
||
<entry><literal>YY</literal> "/" <literal>mm</literal> "/" <literal>dd</literal></entry>
|
||
<entry>"2008/6/30", "1978/12/22"</entry>
|
||
</row>
|
||
<row>
|
||
<entry>4 цифры года и месяц (GNU)</entry>
|
||
<entry><literal>YY</literal> "-" <literal>mm</literal></entry>
|
||
<entry>"2008-6", "2008-06", "1978-12"</entry>
|
||
</row>
|
||
<row>
|
||
<entry>Год, месяц и день с дефисом-разделителем</entry>
|
||
<entry><literal>y</literal> "-" <literal>mm</literal> "-" <literal>dd</literal></entry>
|
||
<entry>"2008-6-30", "78-12-22", "8-6-21"</entry>
|
||
</row>
|
||
<row>
|
||
<entry>День, месяц и 4 цифры года с разделителем в виде точки, символа табуляции или дефиса</entry>
|
||
<entry><literal>dd</literal> [.\t-] <literal>mm</literal> [.-] <literal>YY</literal></entry>
|
||
<entry>"30-6-2008", "22.12.1978"</entry>
|
||
</row>
|
||
<row>
|
||
<entry>День, месяц и 2 цифры года с разделителем в виде точки или символа табуляции</entry>
|
||
<entry><literal>dd</literal> [.\t] <literal>mm</literal> "." <literal>yy</literal></entry>
|
||
<entry>"30.6.08", "22.12.78"</entry>
|
||
</row>
|
||
<row>
|
||
<entry>День, название месяца и год</entry>
|
||
<entry><literal>dd</literal> ([ \t.-])* <literal>m</literal> ([ \t.-])* <literal>y</literal></entry>
|
||
<entry>"30-June 2008", "22DEC78", "14 III 1879"</entry>
|
||
</row>
|
||
<row>
|
||
<entry>Название месяца и 4 цифры года (день месяца сбрасывается на 1)</entry>
|
||
<entry><literal>m</literal> ([ \t.-])* <literal>YY</literal></entry>
|
||
<entry>"June 2008", "DEC1978", "March 1879"</entry>
|
||
</row>
|
||
<row>
|
||
<entry>4 цифры года и название месяца (день месяца сбрасывается на 1)</entry>
|
||
<entry><literal>YY</literal> ([ \t.-])* <literal>m</literal></entry>
|
||
<entry>"2008 June", "1978-XII", "1879.MArCH"</entry>
|
||
</row>
|
||
<row>
|
||
<entry>Название месяца, день и год</entry>
|
||
<entry><literal>m</literal> ([ .\t-])* <literal>dd</literal> [,.stndrh\t ]+ <literal>y</literal></entry>
|
||
<entry>"July 1st, 2008", "April 17, 1790", "May.9,78"</entry>
|
||
</row>
|
||
<row>
|
||
<entry>Название месяца и день</entry>
|
||
<entry><literal>m</literal> ([ .\t-])* <literal>dd</literal> [,.stndrh\t ]*</entry>
|
||
<entry>"July 1st,", "Apr 17", "May.9"</entry>
|
||
</row>
|
||
<row>
|
||
<entry>День и название месяца</entry>
|
||
<entry><literal>dd</literal> ([ .\t-])* <literal>m</literal></entry>
|
||
<entry>"1 July", "17 Apr", "9.May"</entry>
|
||
</row>
|
||
<row>
|
||
<entry>Сокращённое название месяца, день и год</entry>
|
||
<entry><literal>M</literal> "-" <literal>DD</literal> "-" <literal>y</literal></entry>
|
||
<entry>"May-09-78", "Apr-17-1790"</entry>
|
||
</row>
|
||
<row>
|
||
<entry>Год, сокращённое название месяца и день</entry>
|
||
<entry><literal>y</literal> "-" <literal>M</literal> "-" <literal>DD</literal></entry>
|
||
<entry>"78-Dec-22", "1814-MAY-17"</entry>
|
||
</row>
|
||
<row>
|
||
<entry>Только год</entry>
|
||
<entry><literal>YY</literal></entry>
|
||
<entry>"1978", "2008"</entry>
|
||
</row>
|
||
<row>
|
||
<entry>Год (расширенный, 5-19 цифр со знаком)</entry>
|
||
<entry>[+-] <literal>YYY</literal></entry>
|
||
<entry>"-81120", "+20192"</entry>
|
||
</row>
|
||
<row>
|
||
<entry>Только название месяца</entry>
|
||
<entry><literal>m</literal></entry>
|
||
<entry>"March", "jun", "DEC"</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</table>
|
||
|
||
<table>
|
||
<title>Нотации ISO8601</title>
|
||
<tgroup cols="3">
|
||
<thead>
|
||
<row>
|
||
<entry>Описание</entry>
|
||
<entry>Формат</entry>
|
||
<entry>Примеры</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry>8 цифр (год, месяц и день)</entry>
|
||
<entry><literal>YY</literal> <literal>MM</literal> <literal>DD</literal></entry>
|
||
<entry>"15810726", "19780417", "18140517"</entry>
|
||
</row>
|
||
<row>
|
||
<entry>8 цифр (год, месяц и день) со слешем-разделителем</entry>
|
||
<entry><literal>YY</literal> "/" <literal>MM</literal> "/" <literal>DD</literal></entry>
|
||
<entry>"2008/06/30", "1978/12/22"</entry>
|
||
</row>
|
||
<row>
|
||
<entry>2 цифры года, месяц и день с дефисом-разделителем</entry>
|
||
<entry><literal>yy</literal> "-" <literal>MM</literal> "-" <literal>DD</literal></entry>
|
||
<entry>"08-06-30", "78-12-22"</entry>
|
||
</row>
|
||
<row>
|
||
<entry>4 цифры года с необязательным знаком, месяц и день</entry>
|
||
<entry>[+-]? <literal>YY</literal> "-" <literal>MM</literal> "-" <literal>DD</literal></entry>
|
||
<entry>"-0002-07-26", "+1978-04-17", "1814-05-17"</entry>
|
||
</row>
|
||
<row>
|
||
<entry>Пятизначный год с обязательным знаком, месяцем и днём</entry>
|
||
<entry>[+-] <literal>YYY</literal> "-" <literal>MM</literal> "-" <literal>DD</literal></entry>
|
||
<entry>"-81120-02-26", "+20192-04-17"</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</table>
|
||
|
||
<note>
|
||
<para>
|
||
Форматы <literal>y</literal> и <literal>yy</literal> для годов меньше 100 обрабатываются
|
||
в исключительных случаях при использовании символов <literal>y</literal> или
|
||
<literal>yy</literal>. Если год попадает в диапазон 0-69 (включительно), то к нему
|
||
добавляется 2000. Если же год принадлежит диапазону 70-99 (включительно), то к нему
|
||
добавляется 1900. Это означает, что дата "00-01-01" интерпретируется как "2000-01-01".
|
||
</para>
|
||
</note>
|
||
|
||
<note>
|
||
<para>
|
||
Формат "День, месяц и 2 цифры года с разделителем в виде точки или символа табуляции"
|
||
(<literal>dd</literal> [.\t] <literal>mm</literal> "." <literal>yy</literal>) работает только
|
||
для годов из диапазона 61-99 (включительно). За пределами этого диапазона отдаётся
|
||
предпочтение <emphasis>формату времени</emphasis> "<literal>HH</literal> [.:]
|
||
<literal>MM</literal> [.:] <literal>SS</literal>".
|
||
</para>
|
||
</note>
|
||
|
||
<note>
|
||
<para>
|
||
Формат "Только год" задействуется, только если строка времени была найдена.
|
||
В противном случае отдаётся предпочтению формату <literal>HH</literal> <literal>MM</literal>.
|
||
</para>
|
||
</note>
|
||
|
||
<caution>
|
||
<para>
|
||
Возможен выход за границы диапазона форматов <literal>dd</literal> и <literal>DD</literal>.
|
||
День месяца с порядковым номером 0 подразумевает последний день предыдущего месяца в
|
||
результате выхода за границы диапазона. Согласно написанному, "2008-08-00" равносильно
|
||
"2008-07-31", а "2008-06-31" соответствует "2008-07-01" (в июне всего 30 дней).
|
||
</para>
|
||
<para>
|
||
Обратите внимание, что диапазон дней ограничен 0-31, как указано выше
|
||
регулярным выражением. Так что, например, "2008-06-32" — некорректная дата.
|
||
</para>
|
||
<para>
|
||
Также допускается выход за границы диапазона для форматов <literal>mm</literal> и
|
||
<literal>MM</literal> со значением 0. Значение месяца 0 соответствует декабрю
|
||
предыдущего года. Например, дата "2008-00-22" равносильна "2007-12-22".
|
||
</para>
|
||
<para>
|
||
Если учесть два предыдущих замечания и выход за границы диапазона дней и месяцев,
|
||
получим следующее: дата "2008-00-00" в первую очередь преобразуется в "2007-12-00",
|
||
которая будет преобразована в "2007-11-30". То же случится с датой "0000-00-00", которая
|
||
будет преобразована к "-0001-11-30" (минус первый год в календаре ISO 8601 и 2 год до н. э. по
|
||
григорианскому календарю).
|
||
</para>
|
||
</caution>
|
||
</sect1>
|
||
<!--}}}-->
|
||
|
||
<!--Compound Formats: {{{-->
|
||
<sect1 annotations="chunk:false" xml:id="datetime.formats.compound">
|
||
<title>Составные форматов</title>
|
||
|
||
<para>
|
||
Эта страница описывает различные составные форматы даты и времени в BNF-подобном синтаксисе, которые понимает парсер
|
||
функций: <classname>DateTimeImmutable</classname>, <classname>DateTime</classname>,
|
||
<function>date_create</function>,
|
||
<function>date_create_immutable</function> и
|
||
<function>strtotime</function>.
|
||
</para>
|
||
<para>
|
||
Чтобы отформатировать объекты <classname>DateTimeImmutable</classname> и <classname>DateTime</classname>,
|
||
обратитесь к документации метода <function>DateTimeInterface::format</function>.
|
||
</para>
|
||
|
||
<table>
|
||
<title>Используемые символы</title>
|
||
<tgroup cols="3">
|
||
<thead>
|
||
<row>
|
||
<entry>Описание</entry>
|
||
<entry>Форматы</entry>
|
||
<entry>Примеры</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry><literal>DD</literal> (день месяца с ведущим нулём)</entry>
|
||
<entry>"0" [0-9] | [1-2][0-9] | "3" [01]</entry>
|
||
<entry>"02", "12", "31"</entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>doy</literal> (день в году)</entry>
|
||
<entry>"00"[1-9] | "0"[1-9][0-9] | [1-2][0-9][0-9] | "3"[0-5][0-9] | "36"[0-6]</entry>
|
||
<entry>"001", "012", "180", "350", "366"</entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>frac</literal> (дробная часть)</entry>
|
||
<entry>. [0-9]+</entry>
|
||
<entry>".21342", ".85"</entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>hh</literal> (часы)</entry>
|
||
<entry>"0"?[1-9] | "1"[0-2]</entry>
|
||
<entry>"04", "7", "12"</entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>HH</literal> (часы с ведущим нулём)</entry>
|
||
<entry>[01][0-9] | "2"[0-4]</entry>
|
||
<entry>"04", "07", "19"</entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>meridian</literal> (Ante meridiem или Post meridiem)</entry>
|
||
<entry>[AaPp] .? [Mm] .? [\0\t ]</entry>
|
||
<entry>"A.m.", "pM", "am."</entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>ii</literal> (минуты)</entry>
|
||
<entry>[0-5]?[0-9]</entry>
|
||
<entry>"04", "8", "59"</entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>II</literal> (минуты с ведущим нулём)</entry>
|
||
<entry>[0-5][0-9]</entry>
|
||
<entry>"04", "08", "59"</entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>M</literal> (сокращённое наименование месяца)</entry>
|
||
<entry>'jan' | 'feb' | 'mar' | 'apr' | 'may' | 'jun' | 'jul' | 'aug' | 'sep' | 'sept' | 'oct' | 'nov' | 'dec'</entry>
|
||
<entry></entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>MM</literal> (месяц с ведущим нулём)</entry>
|
||
<entry>[0-1][0-9]</entry>
|
||
<entry>"00", "12"</entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>space</literal> (символ пробела или табуляции)</entry>
|
||
<entry>[ \t]</entry>
|
||
<entry></entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>ss</literal> (секунды)</entry>
|
||
<entry>([0-5]?[0-9])|60</entry>
|
||
<entry>"04", "8", "59", "60" (дополнительная секунда)</entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>SS</literal> (секунды с ведущим нулём)</entry>
|
||
<entry>[0-5][0-9]</entry>
|
||
<entry>"04", "08", "59"</entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>W</literal> (неделя в году)</entry>
|
||
<entry>"0"[1-9] | [1-4][0-9] | "5"[0-3]</entry>
|
||
<entry>"05", "17", "53"</entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>tzcorrection</literal> (смещение часового пояса)</entry>
|
||
<entry>"GMT"? [+-] <literal>hh</literal> ":"? <literal>II</literal>?</entry>
|
||
<entry>"+0400", "GMT-07:00", "-07:00"</entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>YY</literal> (4 цифры года)</entry>
|
||
<entry>[0-9]{4}</entry>
|
||
<entry>"2000", "2008", "1978"</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</table>
|
||
|
||
<table>
|
||
<title>Форматы стандартов</title>
|
||
<tgroup cols="2">
|
||
<thead>
|
||
<row>
|
||
<entry>Описание</entry>
|
||
<entry>Примеры</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry>ATOM</entry>
|
||
<entry>"2022-06-02T16:58:35+00:00"</entry>
|
||
</row>
|
||
<row>
|
||
<entry>COOKIE</entry>
|
||
<entry>"Thursday, 02-Jun-2022 16:58:35 UTC"</entry>
|
||
</row>
|
||
<row>
|
||
<entry>ISO8601</entry>
|
||
<entry>"2022-06-02T16:58:35+0000"</entry>
|
||
</row>
|
||
<row>
|
||
<entry><link xlink:href="&url.rfc;822">RFC 822</link></entry>
|
||
<entry>"Thu, 02 Jun 22 16:58:35 +0000"</entry>
|
||
</row>
|
||
<row>
|
||
<entry><link xlink:href="&url.rfc;850">RFC 850</link></entry>
|
||
<entry>"Thursday, 02-Jun-22 16:58:35 UTC"</entry>
|
||
</row>
|
||
<row>
|
||
<entry><link xlink:href="&url.rfc;1036">RFC 1036</link></entry>
|
||
<entry>"Thu, 02 Jun 22 16:58:35 +0000"</entry>
|
||
</row>
|
||
<row>
|
||
<entry><link xlink:href="&url.rfc;1123">RFC 1123</link></entry>
|
||
<entry>"Thu, 02 Jun 2022 16:58:35 +0000"</entry>
|
||
</row>
|
||
<row>
|
||
<entry><link xlink:href="&url.rfc;2822">RFC 2822</link></entry>
|
||
<entry>"Thu, 02 Jun 2022 16:58:35 +0000"</entry>
|
||
</row>
|
||
<row>
|
||
<entry><link xlink:href="&url.rfc;3339">RFC 3339</link></entry>
|
||
<entry>"2022-06-02T16:58:35+00:00"</entry>
|
||
</row>
|
||
<row>
|
||
<entry><link xlink:href="&url.rfc;3339">RFC 3339</link> Extended</entry>
|
||
<entry>"2022-06-02T16:58:35.698+00:00"</entry>
|
||
</row>
|
||
<row>
|
||
<entry><link xlink:href="&url.rfc;7231">RFC 7231</link></entry>
|
||
<entry>"Thu, 02 Jun 2022 16:58:35 GMT"</entry>
|
||
</row>
|
||
<row>
|
||
<entry>RSS</entry>
|
||
<entry>"Thu, 02 Jun 2022 16:58:35 +0000"</entry>
|
||
</row>
|
||
<row>
|
||
<entry>W3C</entry>
|
||
<entry>"2022-06-02T16:58:35+00:00"</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</table>
|
||
|
||
<table>
|
||
<title>Региональные нотации</title>
|
||
<tgroup cols="3">
|
||
<thead>
|
||
<row>
|
||
<entry>Описание</entry>
|
||
<entry>Формат</entry>
|
||
<entry>Примеры</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry>Общий формат log-записей</entry>
|
||
<entry><literal>dd</literal> "/" <literal>M</literal> "/" <literal>YY</literal> : <literal>HH</literal> ":" <literal>II</literal> ":" <literal>SS</literal> <literal>space</literal> <literal>tzcorrection</literal></entry>
|
||
<entry>"10/Oct/2000:13:55:36 -0700"</entry>
|
||
</row>
|
||
<row>
|
||
<entry>EXIF</entry>
|
||
<entry><literal>YY</literal> ":" <literal>MM</literal> ":" <literal>DD</literal> " " <literal>HH</literal> ":" <literal>II</literal> ":" <literal>SS</literal></entry>
|
||
<entry>"2008:08:07 18:11:31"</entry>
|
||
</row>
|
||
<row>
|
||
<entry>Год и неделя в формате ISO</entry>
|
||
<entry><literal>YY</literal> "-"? "W" <literal>W</literal></entry>
|
||
<entry>"2008W27", "2008-W28"</entry>
|
||
</row>
|
||
<row>
|
||
<entry>Год, неделя в формате ISO и день недели</entry>
|
||
<entry><literal>YY</literal> "-"? "W" <literal>W</literal> "-"? [0-7]</entry>
|
||
<entry>"2008W273", "2008-W28-3"</entry>
|
||
</row>
|
||
<row>
|
||
<entry>MySQL</entry>
|
||
<entry><literal>YY</literal> "-" <literal>MM</literal> "-" <literal>DD</literal> " " <literal>HH</literal> ":" <literal>II</literal> ":" <literal>SS</literal></entry>
|
||
<entry>"2008-08-07 18:11:31"</entry>
|
||
</row>
|
||
<row>
|
||
<entry>PostgreSQL: год и день в году</entry>
|
||
<entry><literal>YY</literal> "."? <literal>doy</literal></entry>
|
||
<entry>"2008.197", "2008197"</entry>
|
||
</row>
|
||
<row>
|
||
<entry>SOAP</entry>
|
||
<entry><literal>YY</literal> "-" <literal>MM</literal> "-" <literal>DD</literal> "T" <literal>HH</literal> ":" <literal>II</literal> ":" <literal>SS</literal> <literal>frac</literal> <literal>tzcorrection</literal>?</entry>
|
||
<entry>"2008-07-01T22:35:17.02", "2008-07-01T22:35:17.03+08:00"</entry>
|
||
</row>
|
||
<row>
|
||
<entry>Unix Timestamp</entry>
|
||
<entry>"@" "-"? [0-9]+</entry>
|
||
<entry>"@1215282385"</entry>
|
||
</row>
|
||
<row>
|
||
<entry>Метка времени Unix с микросекундами</entry>
|
||
<entry>"@" "-"? [0-9]+ "." [0-9]{0,6}</entry>
|
||
<entry>"@1607974647.503686"</entry>
|
||
</row>
|
||
<row>
|
||
<entry>XMLRPC</entry>
|
||
<entry><literal>YY</literal> <literal>MM</literal> <literal>DD</literal> "T" <literal>hh</literal> ":" <literal>II</literal> ":" <literal>SS</literal></entry>
|
||
<entry>"20080701T22:38:07", "20080701T9:38:07"</entry>
|
||
</row>
|
||
<row>
|
||
<entry>XMLRPC (Compact)</entry>
|
||
<entry><literal>YY</literal> <literal>MM</literal> <literal>DD</literal> 't' <literal>hh</literal> <literal>II</literal> <literal>SS</literal></entry>
|
||
<entry>"20080701t223807", "20080701T093807"</entry>
|
||
</row>
|
||
<row>
|
||
<entry>WDDX</entry>
|
||
<entry><literal>YY</literal> "-" <literal>mm</literal> "-" <literal>dd</literal> "T" <literal>hh</literal> ":" <literal>ii</literal> ":" <literal>ss</literal></entry>
|
||
<entry>"2008-7-1T9:3:37"</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</table>
|
||
|
||
<note>
|
||
<para>
|
||
Символ "W" в форматах "Год и неделя в формате ISO" и "Год, неделя в формате ISO и день
|
||
недели" чувствителен к регистру, допускается использование символа "W" только в верхнем
|
||
регистре.
|
||
</para>
|
||
<para>
|
||
Символ "T" в форматах SOAP, XMLRPC и WDDX также чувствителен к регистру, допускается
|
||
использование символа "T" только в верхнем регистре.
|
||
</para>
|
||
<para>
|
||
Формат "Unix Timestamp" устанавливает часовой пояс в UTC.
|
||
</para>
|
||
</note>
|
||
</sect1>
|
||
<!--}}}-->
|
||
|
||
<!--Relative Formats: {{{-->
|
||
<sect1 annotations="chunk:false" xml:id="datetime.formats.relative">
|
||
<title>Относительные форматы</title>
|
||
|
||
<para>
|
||
Эта страница описывает относительные форматы даты и времени в BNF-подобном синтаксисе, которые понимает парсер
|
||
функций: <classname>DateTimeImmutable</classname>, <classname>DateTime</classname>,
|
||
<function>date_create</function>,
|
||
<function>date_create_immutable</function> и
|
||
<function>strtotime</function>.
|
||
</para>
|
||
<para>
|
||
Чтобы отформатировать объекты <classname>DateTimeImmutable</classname> и <classname>DateTime</classname>,
|
||
обратитесь к документации метода <function>DateTimeInterface::format</function>.
|
||
</para>
|
||
|
||
<table>
|
||
<title>Используемые символы</title>
|
||
<tgroup cols="2">
|
||
<thead>
|
||
<row>
|
||
<entry>Описание</entry>
|
||
<entry>Формат</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry><literal>dayname</literal> (наименование дня недели)</entry>
|
||
<entry>'sunday' | 'monday' | 'tuesday' | 'wednesday' | 'thursday' |
|
||
'friday' | 'saturday' | 'sun' | 'mon' | 'tue' | 'wed' | 'thu' | 'fri' |
|
||
'sat'</entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>daytext</literal> (интервалы в неделях)</entry>
|
||
<entry>'weekday' | 'weekdays'</entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>number</literal></entry>
|
||
<entry>[+-]?[0-9]+</entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>ordinal</literal> (порядковые числительные и указатели)</entry>
|
||
<entry>'first' | 'second' | 'third' | 'fourth' | 'fifth' | 'sixth' |
|
||
'seventh' | 'eighth' | 'ninth' | 'tenth' | 'eleventh' | 'twelfth' |
|
||
'next' | 'last' | 'previous' | 'this'</entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>reltext</literal> (указатели)</entry>
|
||
<entry>'next' | 'last' | 'previous' | 'this'</entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>space</literal> (символы пробела и табуляции)</entry>
|
||
<entry>[ \t]+</entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>unit</literal> (интервалы)</entry>
|
||
<entry>
|
||
'ms' | 'µs' | (( 'msec' | 'millisecond' | 'µsec' | 'microsecond'
|
||
| 'usec' | 'sec' | 'second' | 'min' | 'minute' | 'hour' | 'day' |
|
||
'fortnight' | 'forthnight' | 'month' | 'year') 's'?) | 'weeks' |
|
||
<literal>daytext</literal>
|
||
</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</table>
|
||
|
||
<table>
|
||
<title>Нотации, основанные на днях</title>
|
||
<tgroup cols="3">
|
||
<thead>
|
||
<row>
|
||
<entry>Формат</entry>
|
||
<entry>Описание</entry>
|
||
<entry>Примеры</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry>'yesterday'</entry>
|
||
<entry>Полночь вчера</entry>
|
||
<entry>"yesterday 14:00"</entry>
|
||
</row>
|
||
<row>
|
||
<entry>'midnight'</entry>
|
||
<entry>Время устанавливается в 00:00:00</entry>
|
||
<entry></entry>
|
||
</row>
|
||
<row>
|
||
<entry>'today'</entry>
|
||
<entry>Время устанавливается в 00:00:00</entry>
|
||
<entry></entry>
|
||
</row>
|
||
<row>
|
||
<entry>'now'</entry>
|
||
<entry>Текущее время</entry>
|
||
<entry></entry>
|
||
</row>
|
||
<row>
|
||
<entry>'noon'</entry>
|
||
<entry>Время устанавливается в 12:00:00</entry>
|
||
<entry>"yesterday noon"</entry>
|
||
</row>
|
||
<row>
|
||
<entry>'tomorrow'</entry>
|
||
<entry>Полночь завтра</entry>
|
||
<entry></entry>
|
||
</row>
|
||
<row>
|
||
<entry>'back of' <literal>hour</literal></entry>
|
||
<entry>15 минут заданного часа</entry>
|
||
<entry>"back of 7pm", "back of 15"</entry>
|
||
</row>
|
||
<row>
|
||
<entry>'front of' <literal>hour</literal></entry>
|
||
<entry>Без 15 минут заданный час</entry>
|
||
<entry>"front of 5am", "front of 23"</entry>
|
||
</row>
|
||
<row>
|
||
<entry>'first day of'</entry>
|
||
<entry>
|
||
Устанавливает первый день текущего месяца. Обычно эту нотацию лучше использовать
|
||
вместе с названием месяца, следующим за ней, иначе будет учитываться текущий месяц.
|
||
</entry>
|
||
<entry>"first day of January 2008"</entry>
|
||
</row>
|
||
<row>
|
||
<entry>'last day of'</entry>
|
||
<entry>
|
||
Устанавливает последний день текущего месяца. Обычно эту нотацию лучше использовать
|
||
вместе с названием месяца, следующим за ней, иначе будет учитываться текущий месяц.
|
||
</entry>
|
||
<entry>"last day of next month"</entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>ordinal</literal> <literal>space</literal> <literal>dayname</literal> <literal>space</literal> 'of'</entry>
|
||
<entry>Вычисляет <literal>x</literal> день недели текущего или заданного месяца.</entry>
|
||
<entry>"first sat of July 2008"</entry>
|
||
</row>
|
||
<row>
|
||
<entry>'last' <literal>space</literal> <literal>dayname</literal> <literal>space</literal> 'of'</entry>
|
||
<entry>Вычисляет <emphasis>последний</emphasis> день недели текущего или заданного месяца.</entry>
|
||
<entry>"last sat of July 2008"</entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>number</literal> <literal>space</literal>? (<literal>unit</literal> | 'week')</entry>
|
||
<entry>Вычисляет относительное время при использовании числовых значений периода.</entry>
|
||
<entry>"+5 weeks", "12 day", "-7 weekdays"</entry>
|
||
</row>
|
||
<row>
|
||
<entry>(<literal>ordinal</literal> | <literal>reltext</literal>) <literal>space</literal> <literal>unit</literal></entry>
|
||
<entry>Вычисляет относительное время при использовании строковых значений периода.
|
||
<literal>last</literal> и <literal>previous</literal> то же, что и
|
||
<literal>-1</literal>, <literal>this</literal> ни на что не влияет, а
|
||
<literal>next</literal> – <literal>+1</literal>.
|
||
</entry>
|
||
<entry>"fifth day", "second month", "last day", "previous year"</entry>
|
||
</row>
|
||
<row>
|
||
<entry>'ago'</entry>
|
||
<entry>Вычитает все значения из последнего полученного момента времени.</entry>
|
||
<entry>"2 days ago", "8 days ago 14:00", "2 months 5 days ago", "2 months ago 5 days", "2 days ago ago"</entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>dayname</literal></entry>
|
||
<entry>
|
||
Перемещается на следующий день указанного дня недели. (Смотрите <link linkend="datetime.formats.relative.dayname-note">замечание</link>)
|
||
</entry>
|
||
<entry>"Monday"</entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>reltext</literal> <literal>space</literal> 'week'</entry>
|
||
<entry>Разбирает специфичный формат "weekday + last/this/next week".</entry>
|
||
<entry>"Monday next week"</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</table>
|
||
|
||
<note>
|
||
<para>
|
||
Относительные выражения всегда обрабатываются <emphasis>после</emphasis> не являющихся относительными.
|
||
Например, "+1 week july 2008" эквивалентно "july 2008 +1 week".
|
||
</para>
|
||
<para>
|
||
Исключением этого правила являются: "yesterday", "midnight", "today", "noon" и "tomorrow".
|
||
Записи "tomorrow 11:00" и "11:00 tomorrow" отличаются. Если принять сегодняшнюю дату за "July 23rd, 2008",
|
||
то первая запись возвращает "2008-07-24 11:00", а вторая "2008-07-24 00:00". Причина такого поведения в том,
|
||
что эти пять выражений влияют непосредственно на время.
|
||
</para>
|
||
<para>
|
||
Такие ключевые слова, как "first day of", зависят от контекста, в котором используется строка относительного формата.
|
||
Если она используется в статическом методе или функции, то референтом является текущая системная метка времени.
|
||
Однако при использовании в методе <function>DateTime::modify</function> или
|
||
<function>DateTimeImmutable::modify</function>,
|
||
референтом является объект, на котором вызывается метод <literal>modify()</literal>.
|
||
</para>
|
||
</note>
|
||
|
||
<note>
|
||
<para xml:id="datetime.formats.relative.dayname-note">
|
||
Следует обратить внимание на приведённые ниже замечания относительно текущего дня недели и дня недели,
|
||
указанного в строке даты и времени. Текущий день недели может быть вычислен из независимой части строки
|
||
даты и времени.
|
||
</para>
|
||
<orderedlist>
|
||
<listitem>
|
||
<simpara>
|
||
"<literal>dayname</literal>" <emphasis>не</emphasis> сдвигает дату на другой день.
|
||
(Например: "Wed July 23rd, 2008" означает "2008-07-23").
|
||
</simpara>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara>
|
||
"<literal>number</literal> <literal>dayname</literal>" <emphasis>не</emphasis> сдвигает дату
|
||
на другой день. (Например: "1 wednesday july 23rd, 2008" означает "2008-07-23").
|
||
</simpara>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara>
|
||
"<literal>number</literal> week <literal>dayname</literal>" добавляет соответствующее число недель,
|
||
но <emphasis>не</emphasis> сдвигает дату на другой день. В этом случае имеют место два различных блока
|
||
"<literal>number</literal> week" и "<literal>dayname</literal>".
|
||
(Например: "+1 week wednesday july 23rd, 2008" означает "2008-07-30").
|
||
</simpara>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara>
|
||
"<literal>ordinal</literal> <literal>dayname</literal>" <emphasis>сдвигает</emphasis> дату
|
||
на другой день. (Например: "last wednesday july 23rd, 2008" означает "2008-07-30").
|
||
</simpara>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara>
|
||
"<literal>number</literal> week <literal>ordinal</literal> <literal>dayname</literal>"
|
||
добавляет соответствующее число недель, а после <emphasis>сдвигает</emphasis> дату на другой день.
|
||
В этом случае имеют место два различных блока "<literal>number</literal> week" и
|
||
"<literal>ordinal</literal> <literal>dayname</literal>".
|
||
(Например: "+1 week first wednesday july 23rd, 2008" означает "2008-08-06").
|
||
</simpara>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara>
|
||
"<literal>ordinal</literal> <literal>dayname</literal> 'of' " <emphasis>не</emphasis> сдвигает дату
|
||
на другой день. (Например: "first wednesday of july 23rd, 2008" означает "2008-07-02", потому как
|
||
определённые фразы с 'of' сбрасывают день месяца на '1' и в этом случае игнорируется '23rd').
|
||
</simpara>
|
||
</listitem>
|
||
</orderedlist>
|
||
<para>
|
||
Также следует обратить внимание, что "of" в "<literal>ordinal</literal>
|
||
<literal>space</literal> <literal>dayname</literal>
|
||
<literal>space</literal> 'of' " и "'last' <literal>space</literal>
|
||
<literal>dayname</literal> <literal>space</literal> 'of' " имеет особый смысл.
|
||
</para>
|
||
<orderedlist>
|
||
<listitem>
|
||
<simpara>
|
||
Устанавливает день месяца в 1.
|
||
</simpara>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara>
|
||
"<literal>ordinal</literal> <literal>dayname</literal> 'of' "<emphasis>не</emphasis> сдвигает дату
|
||
на другой день. (Например: "first tuesday of july 2008" означает "2008-07-01").
|
||
</simpara>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara>
|
||
"<literal>ordinal</literal> <literal>dayname</literal>" <emphasis>сдвигает</emphasis> дату на другой день.
|
||
(Например: "first tuesday july 2008" означает "2008-07-08", смотрите также 4-й пункт предыдущего замечания).
|
||
</simpara>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara>
|
||
"'last' <literal>dayname</literal> 'of' " получает последний в месяце <literal>dayname</literal>.
|
||
(Например: "last wed of july 2008" означает "2008-07-30")
|
||
</simpara>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara>
|
||
"'last' <literal>dayname</literal>" получает последний <literal>dayname</literal> перед текущим днём.
|
||
(Например: "last wed july 2008" означает "2008-06-25"; "july 2008" устанавливает дату в "2008-07-01",
|
||
а после "last wed" смещает дату к предыдущей среде, а именно к "2008-06-25").
|
||
</simpara>
|
||
</listitem>
|
||
</orderedlist>
|
||
</note>
|
||
<note>
|
||
<para>
|
||
Относительные значения в месяцах рассчитываются исходя из их продолжительности.
|
||
Например, из "+2 month 2011-11-30" получится "2012-01-30".
|
||
Это связано с тем, что ноябрь состоит из 30 дней, а декабрь из 31 дня, что составляет 61 дней.
|
||
</para>
|
||
</note>
|
||
<note>
|
||
<para>
|
||
Под числом (<literal>number</literal>) подразумевается целое число
|
||
(<emphasis>integer</emphasis>); Если будет указано десятичное число, то
|
||
десятичная точка (или запятая) будет рассматриваться как разделитель.
|
||
К примеру, <literal>'+1.5 hours'</literal> будет считаться как
|
||
<literal>'+1 5 hours'</literal>, а не <literal>'+1 hour +30 minutes'</literal>.
|
||
</para>
|
||
</note>
|
||
|
||
<sect2 role="changelog">
|
||
&reftitle.changelog;
|
||
<para>
|
||
<informaltable>
|
||
<tgroup cols="2">
|
||
<thead>
|
||
<row>
|
||
<entry>&Version;</entry>
|
||
<entry>&Description;</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry>8.2.0</entry>
|
||
<entry>
|
||
Символы <literal>number</literal> больше не принимают несколько знаков,
|
||
например, <literal>+-2</literal>.
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>7.0.8</entry>
|
||
<entry>
|
||
Недели всегда начинаются с понедельника. Ранее можно было определять
|
||
начало недели с воскресенья.
|
||
</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
</para>
|
||
</sect2>
|
||
</sect1>
|
||
<!--}}}-->
|
||
|
||
</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=marker fdl=2 si
|
||
vim: et tw=78 syn=sgml
|
||
vi: ts=1 sw=1
|
||
-->
|