На этой странице описаны относительные форматы даты/времени, которые понимает парсер функций strtotime(), DateTime и date_create().
Описание | Формат |
---|---|
dayname (наименование дня недели) | 'sunday' | 'monday' | 'tuesday' | 'wednesday' | 'thursday' | 'friday' | 'saturday' | 'sun' | 'mon' | 'tue' | 'wed' | 'thu' | 'fri' | 'sat' |
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' | Полночь завтра | |
'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 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" означает "2008-07-30").
- "number week ordinal dayname" добавляет соответствующее число недель, а после сдвигает дату на другой день. В этом случае имеют место два различных блока "number week" и "ordinal dayname". (Например: "+1 week first wednesday july 23rd, 2008" означает "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 дней.
Замечание:
Под числом (number) подразумевается целое число (integer); Если будет указано десятичное число, то десятичная точка (или запятая) будет рассматриваться как разделитель. К примеру, '+1.5 hours' будет считаться как '+1 5 hours', а не '+1 hour +30 minutes'.
Версия | Описание |
---|---|
5.6.23, 7.0.8 | Недели всегда начинаются с понедельника. Ранее можно было определять начало недели с воскресенья. |
5.3.3 | Поведение "first day" и "last day" изменено на "+1 day" and "-1 day", соответственно. Ранее поведение было равносильно "first day of" и "last day of". |