- Функция date() в php: распространенные форматы, примеры, советы
- Готовые константы
- Самые распространенные форматы даты и времени
- Формат даты и времени в России:
- Для хранения в поле date в mysql
- Для хранения в поле datetime в mysql
- С часовым поясом
- Дата в формате ISO 8601
- Дата в формате RFC822
- Дата в формате RFC 2822
- Дата начала текущего месяца
- Дата конца текущего месяца
- Текущий квартал
- Другие форматы
- Символы, которые распознаются в параметре $format
- date
- Список параметров
- Возвращаемые значения
- Ошибки
- Список изменений
- Примеры
- Примечания
- Смотрите также
- User Contributed Notes
Функция date() в php: распространенные форматы, примеры, советы
Функция date предназначена для форматирования даты т.е. она преобразует timestamp в строку.
date(string $format, int|null $timestamp = null): string — сигнатура функции
Если $timestamp не указан, то будет форматироваться текущая дата т.е. которая сейчас установлена на сервере.
Пример, который выводит текущую дату на экран:
Этот код выведет на экран текущую в таком виде: 2021-06-26 12:09:59
Вторым параметром date() принимает timestamp.
Кстати, текущий timestamp можно получить функцией time(), по умолчанию он и используется, поэтому если вам нужна текущая дата, то его можно не указывать:
date('Y-m-d H:i:s') == date('Y-m-d H:i:s', time()); // всегда true
- Y — год
- m — месяц
- d — день
- H — час
- i — минута
- s — секунда
Подробная таблица о символах, которые распознаются в параметре $format находится здесь: https://www.php.net/manual/ru/datetime.format.php
Готовые константы
В PHP есть множество предопределенных констант, для формата даты и времени. Их можно использовать чтобы не допустить ошибку при написании формата.
Константа | Формат | Пример |
---|---|---|
DateTime::ATOM | Y-m-d\TH:i:sP | 2021-06-26T12:09:59+03:00 |
DateTime::COOKIE | l, d-M-Y H:i:s T | Saturday, 26-Jun-2021 12:09:59 MSK |
DateTime::ISO8601 | Y-m-d\TH:i:sO | 2021-06-26T12:09:59+0300 |
DateTime::RFC822 | D, d M y H:i:s O | Sat, 26 Jun 21 12:09:59 +0300 |
DateTime::RFC850 | l, d-M-y H:i:s T | Saturday, 26-Jun-21 12:09:59 MSK |
DateTime::RFC1036 | D, d M y H:i:s O | Sat, 26 Jun 21 12:09:59 +0300 |
DateTime::RFC1123 | D, d M Y H:i:s O | Sat, 26 Jun 2021 12:09:59 +0300 |
DateTime::RFC7231 | D, d M Y H:i:s \G\M\T | Sat, 26 Jun 2021 12:09:59 GMT |
DateTime::RFC2822 | D, d M Y H:i:s O | Sat, 26 Jun 2021 12:09:59 +0300 |
DateTime::RFC3339 | Y-m-d\TH:i:sP | 2021-06-26T12:09:59+03:00 |
DateTime::RFC3339_EXTENDED | Y-m-d\TH:i:s.vP | 2021-06-26T12:09:59.000+03:00 |
DateTime::RSS | D, d M Y H:i:s O | Sat, 26 Jun 2021 12:09:59 +0300 |
DateTime::W3C | Y-m-d\TH:i:sP | 2021-06-26T12:09:59+03:00 |
Самые распространенные форматы даты и времени
Допустим текущее время 2021-06-26 12:06:59. Давайте посмотрим как будет вести себя функция date в зависимости от формата.
Формат даты и времени в России:
echo date('d.m.Y'); // 26.06.2021 echo date('d.m.Y H:i'); // 26.06.2021 12:09
Для хранения в поле date в mysql
Для хранения в поле datetime в mysql
echo date('Y-m-d H:m:s'); // 2021-06-26 12:06:59
С часовым поясом
echo date('Y-m-d H:m:sO'); // 2021-06-26 12:06:59+0300 echo date('Y-m-d H:m:sP'); // 2021-06-26 12:06:59+03:00
Дата в формате ISO 8601
echo date('c'); // 2021-06-26T12:09:59+03:00
Дата в формате RFC822
echo date(DATE_RFC822); // Sat, 26 Jun 21 12:09:59 +0300
Дата в формате RFC 2822
echo date('r'); // Sat, 26 Jun 2021 12:09:59 +0300
Дата начала текущего месяца
echo date('Y-m-01'); // 2021-06-01 (начало месяца)
Дата конца текущего месяца
echo date('Y-m-t'); // 2021-06-30 (конец месяца)
Текущий квартал
echo intval((date('n') + 2) / 3); // 2
Другие форматы
Если вам недостаточно приведенных примеров, то можете написать свой формат даты и времени. Для этого вам нужно написать свой параметр $format
Символы, которые распознаются в параметре $format
Символ в строке format | Описание | Пример возвращаемого значения |
---|---|---|
День | — | — |
d | День месяца, 2 цифры с ведущим нулём | от 01 до 31 |
D | Текстовое представление дня недели, 3 символа | от Mon до Sun |
j | День месяца без ведущего нуля | от 1 до 31 |
l (строчная ‘L’) | Полное наименование дня недели | от Sunday до Saturday |
N | Порядковый номер дня недели в соответствии со стандартом ISO-8601 | от 1 (понедельник) до 7 (воскресенье) |
S | Английский суффикс порядкового числительного дня месяца, 2 символа | st, nd, rd или th. Применяется совместно с j |
w | Порядковый номер дня недели | от 0 (воскресенье) до 6 (суббота) |
z | Порядковый номер дня в году (начиная с 0) | От 0 до 365 |
Неделя | — | — |
W | Порядковый номер недели года в соответствии со стандартом ISO-8601; недели начинаются с понедельника | Например: 42 (42-я неделя года) |
Месяц | — | — |
F | Полное наименование месяца, например, January или March | от January до December |
m | Порядковый номер месяца с ведущим нулём | от 01 до 12 |
M | Сокращённое наименование месяца, 3 символа | от Jan до Dec |
n | Порядковый номер месяца без ведущего нуля | от 1 до 12 |
t | Количество дней в указанном месяце | от 28 до 31 |
Год | — | — |
L | Признак високосного года | 1, если год високосный, иначе 0. |
o | Номер года в соответствии со стандартом ISO-8601. Имеет то же значение, что и Y, кроме случая, когда номер недели ISO (W) принадлежит предыдущему или следующему году; тогда будет использован год этой недели. | Примеры: 1999 или 2003 |
Y | Порядковый номер года, 4 цифры | Примеры: 1999, 2003 |
y | Номер года, 2 цифры | Примеры: 99, 03 |
Время | — | — |
a | Ante meridiem (лат. «до полудня») или Post meridiem (лат. «после полудня») в нижнем регистре | am или pm |
A | Ante meridiem или Post meridiem в верхнем регистре | AM или PM |
B | Время в формате Интернет-времени (альтернативной системы отсчёта времени суток) | от 000 до 999 |
g | Часы в 12-часовом формате без ведущего нуля | от 1 до 12 |
G | Часы в 24-часовом формате без ведущего нуля | от 0 до 23 |
h | Часы в 12-часовом формате с ведущим нулём | от 01 до 12 |
H | Часы в 24-часовом формате с ведущим нулём | от 00 до 23 |
i | Минуты с ведущим нулём | от 00 до 59 |
s | Секунды с ведущим нулём | от 00 до 59 |
u | Микросекунды. Учтите, что date() всегда будет возвращать 000000, т.к. она принимает целочисленный (int) параметр, тогда как DateTime::format() поддерживает микросекунды, если DateTime создан с ними. | Например: 654321 |
v | Миллисекунды. Замечание такое же как и для u. | Пример: 654 |
Временная зона | — | — |
e | Идентификатор временной зоны | Примеры: UTC, GMT, Atlantic/Azores |
I (заглавная i) | Признак летнего времени | 1, если дата соответствует летнему времени, 0 в противном случае. |
O | Разница с временем по Гринвичу без двоеточия между часами и минутами | Например: +0200 |
P | Разница с временем по Гринвичу с двоеточием между часами и минутами | Например: +02:00 |
p | То же, что и P, но возвращает Z вместо +00:00 | Например: +02:00 |
T | Аббревиатура временной зоны | Примеры: EST, MDT . |
Z | Смещение временной зоны в секундах. Для временных зон, расположенных западнее UTC возвращаются отрицательные числа, а расположенных восточнее UTC — положительные. | от -43200 до 50400 |
Полная дата/время | — | — |
c | Дата в формате стандарта ISO 8601 | 2004-02-12T15:19:21+00:00 |
r | Дата в формате » RFC 2822 | Например: Thu, 21 Dec 2000 16:01:07 +0200 |
U | Количество секунд, прошедших с начала Эпохи Unix (1 января 1970 00:00:00 GMT) | Смотрите также time() |
date
Возвращает строку, отформатированную в соответствии с указанным в параметре format шаблоном. Используется метка времени, заданная параметром timestamp (метка времени Unix), или текущее системное время, если параметр timestamp не задан. Таким образом, параметр timestamp является необязательным и по умолчанию равен значению, возвращаемому функцией time() .
Метки времени Unix не обрабатывают часовые пояса. Используйте класс DateTimeImmutable и его метод форматирования DateTimeInterface::format() для форматирования информации о дате/времени с привязкой к часовому поясу.
Список параметров
Замечание: Функция date() всегда будет генерировать 000000 в качестве микросекунд, поскольку она принимает параметр int , тогда как DateTime::format() поддерживает микросекунды, если DateTime был создан с микросекундами.
Необязательный параметр timestamp представляет собой метку времени типа int , по умолчанию равную текущему локальному времени, если timestamp не указан или null . Другими словами, значение по умолчанию равно результату функции time() .
Возвращаемые значения
Возвращает отформатированную строку с датой.
Ошибки
Каждый вызов к функциям даты/времени при неправильных настройках часового пояса сгенерирует ошибку уровня E_WARNING , если часовой пояс некорректный. Смотрите также date_default_timezone_set()
Список изменений
Версия | Описание |
---|---|
8.0.0 | timestamp теперь допускает значение null. |
Примеры
Пример #1 Примеры использования функции date()
// установка часового пояса по умолчанию.
date_default_timezone_set ( ‘UTC’ );
?php
// выведет примерно следующее: Monday
echo date ( «l» );
// выведет примерно следующее: Monday 8th of August 2005 03:12:46 PM
echo date ( ‘l jS \of F Y h:i:s A’ );
// выведет: July 1, 2000 is on a Saturday
echo «July 1, 2000 is on a » . date ( «l» , mktime ( 0 , 0 , 0 , 7 , 1 , 2000 ));
/* пример использования константы в качестве форматирующего параметра */
// выведет примерно следующее: Mon, 15 Aug 2005 15:12:46 UTC
echo date ( DATE_RFC822 );
// выведет примерно следующее: 2000-07-01T00:00:00+00:00
echo date ( DATE_ATOM , mktime ( 0 , 0 , 0 , 7 , 1 , 2000 ));
?>
Чтобы запретить распознавание символа как форматирующего, следует экранировать его с помощью обратного слеша. Если экранированный символ также является форматирующей последовательностью, то следует экранировать его повторно.
Пример #2 Экранирование символов в функции date()
Для вывода прошедших и будущих дат удобно использовать функции date() и mktime() .
Пример #3 Пример совместного использования функций date() и mktime()
$tomorrow = mktime ( 0 , 0 , 0 , date ( «m» ) , date ( «d» )+ 1 , date ( «Y» ));
$lastmonth = mktime ( 0 , 0 , 0 , date ( «m» )- 1 , date ( «d» ), date ( «Y» ));
$nextyear = mktime ( 0 , 0 , 0 , date ( «m» ), date ( «d» ), date ( «Y» )+ 1 );
?>?php
Замечание:
Данный способ более надёжен, чем простое вычитание и прибавление секунд к метке времени, поскольку позволяет при необходимости гибко осуществить переход на летнее/зимнее время.
Ещё несколько примеров использования функции date() . Важно отметить, что следует экранировать все символы, которые необходимо оставить без изменений. Это справедливо и для тех символов, которые в текущей версии PHP не распознаются как форматирующие, поскольку это может быть введено в следующих версиях. Для экранировании управляющих последовательностей (например, \n) следует использовать одинарные кавычки.
Пример #4 Форматирование с использованием date()
// Предположим, что текущей датой является 10 марта 2001, 5:16:18 вечера,
// и мы находимся в часовом поясе Mountain Standard Time (MST)
?php
$today = date ( «F j, Y, g:i a» ); // March 10, 2001, 5:16 pm
$today = date ( «m.d.y» ); // 03.10.01
$today = date ( «j, n, Y» ); // 10, 3, 2001
$today = date ( «Ymd» ); // 20010310
$today = date ( ‘h-i-s, j-m-y, it is w Day’ ); // 05-16-18, 10-03-01, 1631 1618 6 Satpm01
$today = date ( ‘\i\t \i\s \t\h\e jS \d\a\y.’ ); // it is the 10th day.
$today = date ( «D M j G:i:s T Y» ); // Sat Mar 10 17:16:18 MST 2001
$today = date ( ‘H:m:s \m \i\s\ \m\o\n\t\h’ ); // 17:03:18 m is month
$today = date ( «H:i:s» ); // 17:16:18
$today = date ( «Y-m-d H:i:s» ); // 2001-03-10 17:16:18 (формат MySQL DATETIME)
?>
Для форматирования дат на других языках вместо функции date() можно использовать метод IntlDateFormatter::format() .
Примечания
Замечание:
Для получения метки времени из строкового представления даты можно воспользоваться функцией strtotime() . Кроме того, некоторые базы данных имеют собственные функции для преобразования внутреннего представления даты в метку времени (например, функция MySQL » UNIX_TIMESTAMP).
Временную метку начала запроса можно получить из поля $_SERVER[‘REQUEST_TIME’] .
Смотрите также
- DateTimeImmutable::__construct() — Возвращает новый объект DateTimeImmutable
- DateTimeInterface::format() — Возвращает дату, отформатированную согласно переданному формату
- gmdate() — Форматирует дату/время по Гринвичу
- idate() — Преобразует локальное время/дату в целое число
- getdate() — Возвращает информацию о дате/времени
- getlastmod() — Получает время последней модификации страницы
- mktime() — Возвращает метку времени Unix для заданной даты
- IntlDateFormatter::format() — Форматирует значение даты/времени в виде строки
- time() — Возвращает текущую метку системного времени Unix
- Предопределённые константы даты и времени
User Contributed Notes
- Функции даты и времени
- checkdate
- date_add
- date_create_from_format
- date_create_immutable_from_format
- date_create_immutable
- date_create
- date_date_set
- date_default_timezone_get
- date_default_timezone_set
- date_diff
- date_format
- date_get_last_errors
- date_interval_create_from_date_string
- date_interval_format
- date_isodate_set
- date_modify
- date_offset_get
- date_parse_from_format
- date_parse
- date_sub
- date_sun_info
- date_sunrise
- date_sunset
- date_time_set
- date_timestamp_get
- date_timestamp_set
- date_timezone_get
- date_timezone_set
- date
- getdate
- gettimeofday
- gmdate
- gmmktime
- gmstrftime
- idate
- localtime
- microtime
- mktime
- strftime
- strptime
- strtotime
- time
- timezone_abbreviations_list
- timezone_identifiers_list
- timezone_location_get
- timezone_name_from_abbr
- timezone_name_get
- timezone_offset_get
- timezone_open
- timezone_transitions_get
- timezone_version_get