Форматы отношений
Эта страница описывает различные форматы времени, которые принимают strtotime(), DateTime и date_create().
Описание | Формат |
---|---|
dayname (наименование дня недели) | 'sunday' | 'monday' | 'tuesday' | 'wednesday' | 'thursday' | 'friday' | 'saturday' | 'sun' | 'mon' | 'tue' | 'wed' | 'thu' | 'fri' | 'sat' | 'sun' |
daytext (интервалы в неделях) | 'weekday' | 'weekdays' |
number | [+-]?[0-9]+ |
ordinal (порядковые числительные и указатели) | 'first' | 'second' | 'third' | 'fourth' | 'fifth' | 'sixth' | 'seventh' | 'eighth' | 'ninth' | 'tenth' | 'eleventh' | 'twelfth' | 'next' | 'last' | 'previous' | 'this' |
reltext (указатели) | 'next' | 'last' | 'previous' | 'this' |
space (символы пробела и табуляции) | [ \t]+ |
unit (интервалы) | (('sec' | 'second' | 'min' | 'minute' | 'hour' | 'day' | 'fortnight' | 'forthnight' | 'month' | 'year') 's'?) | 'weeks' | daytext |
Формат | Описание | Примеры |
---|---|---|
'yesterday' | Полночь вчера | "yesterday 14:00" |
'midnight' | Время устанавливается в 00:00:00 | |
'today' | Время устанавливается в 00:00:00 | |
'now' | Текущее время | |
'noon' | Время устанавливается в 12:00:00 | "yesterday noon" |
'tomorrow' | Midnight of tomorrow | |
'back of' hour | без 15 минут заданный час | "back of 7pm", "back of 15" |
'front of' hour | 15 минут заданного часа | "front of 5am", "front of 23" |
'first day of'? | Устанавливает первый день текущего месяца. При использовании с указанием на месяц - устанавливает первый день заданного месяца. | "first day of January 2008" |
'last day of'? | Устанавливает последний день текущего месяца. При использовании с указанием на месяц - устанавливает последний день заданного месяца. | "last day of next month" |
ordinal space dayname space 'of' | Вычисляет x-й день недели текущего или заданного месяца. | "first sat of July 2008" |
'last' space dayname space 'of' | Вычисляет последний день недели текущего или заданного месяца. | "last sat of July 2008" |
number space? (unit | 'week') | Вычисляет относительное время при использовании числовых значений периода. | "+5 weeks", "12 day", "-7 weekdays" |
ordinal space unit | Вычисляет относительное время при использовании строковых значений периода. | "fifth day", "second month" |
'ago' | Вычитает все значения из последнего полученного момента времени. | "2 days ago", "8 days ago 14:00", "2 months 5 days ago", "2 months ago 5 days", "2 days ago" |
dayname | Перемещается на следующий день указанного дня недели. | "Monday" |
reltext space 'week' | Разбирает специфичный формат "weekday + last/this/next week". | "Monday next week" |
Замечание:
Относительные выражения всегда обрабатываются после не являющихся относительными. Например, "+1 week july 2008" эквивалентно "july 2008 +1 week".
Исключением этого правила являются: "yesterday", "midnight", "today", "noon" и "tomorrow". Записи "tomorrow 11:00" и "11:00 tomorrow" отличаются. Если принять сегодняшнюю дату за "July 23rd, 2008", то первая запись возвращает "2008-07-24 11:00", а вторая "2008-07-24 00:00". Причина такого поведения в том, что эти пять выражений влияют непосредственно на время.
Замечание:
Следует обратить внимание на приведенные ниже замечания относительно текущего дня недели и дня недели, указанного в строке даты/времени. Текущий день недели может быть вычислен из независимой части строки даты/времени.
- "dayname" не сдвигает дату на другой день. (Например: "Wed July 23rd, 2008" означает "2008-07-23").
- "number dayname" не сдвигает дату на другой день. (Например: "1 wednesday july 23rd, 2008" означает "2008-07-23").
- "number week dayname" добавляет соответствующее число недель, но не сдвигает дату на другой день. В этом случае имеют место два различных блока "number week" и "dayname". (Например: "+1 week wednesday july 23rd, 2008" означает "2008-07-30").
- "ordinal dayname" сдвигает дату на другой день. (Например: "last wednesday july 23rd, 2008" means "2008-07-30").
- "number week ordinal dayname" добавляет соответствующее число недель, а после сдвигает дату на другой день. В этом случае имеют место два различных блока "number week" и "ordinal dayname". (Например: "+1 week first wednesday july 23rd, 2008" means "2008-08-06").
- "ordinal dayname 'of' " не сдвигает дату на другой день. (Например: "first wednesday of july 23rd, 2008" означает "2008-07-02", потому как определенные фразы с 'of' сбрасывают день месяца на '1' и в этом случае игнорируется '23rd').
Также следует обратить внимание, что "of" в "ordinal space dayname space 'of' " и "'last' space dayname space 'of' " имеет особый смысл.
- Устанавливает день месяца в 1.
- "ordinal dayname 'of' "не сдвигает дату на другой день. (Например: "first tuesday of july 2008" означает "2008-07-01").
- "ordinal dayname" сдвигает дату на другой день. (Например: "first tuesday july 2008" означает "2008-07-08", смотри также 4-й пункт предыдущего замечания).
- "'last' dayname 'of' " получает последний в месяце dayname. (Например: "last wed of july 2008" означает "2008-07-30")
- "'last' dayname" получает последний dayname до перед текущим днем. (Например: "last wed july 2008" означает "2008-06-25"; "july 2008" устанавливает дату в "2008-07-01", а после "last wed" смещает дату к предыдущему вторнику, а именно к "2008-06-25").
Замечание:
Относительные значения в месяцах рассчитываются исходя из их продолжительности. Например из "+2 month 2011-11-30" получится "2012-01-30", т.к. ноябрь состоит из 30 дней, а декабрь из 31 дня, что в сумме дает 61 день. Это связано с ноября составляет 30 дней в длину, и в декабре является 31 дней в длине, производя в общей сложности 61 дней.
Список изменений
Версия | Описание |
---|---|
5.3.3 | Изменено поведение "first day" и "last day" в соответствии с "+1 day" and "-1 day". Ранее, они соответствовали поведению "first day of" и "last day of". |
Коментарии
Be careful when using "-1 month" the last days of a month.
For instance the 31th of october: result won't be in september but in october !
Please, consider this:
<?php
print_r(new DateTime("now"));
print_r(new DateTime("-1 month"));
print_r(new DateTime("-2 months"));
?>
Result is:
DateTime Object
(
[date] => 2022-10-31 07:42:32.968925
[timezone_type] => 3
[timezone] => Europe/Paris
)
DateTime Object
(
[date] => 2022-10-01 07:42:32.969344
[timezone_type] => 3
[timezone] => Europe/Paris
)
DateTime Object
(
[date] => 2022-08-31 07:42:32.969349
[timezone_type] => 3
[timezone] => Europe/Paris
)