Функция date() в php: распространенные форматы, примеры, советы

Функция date предназначена для форматирования даты т.е. она преобразует timestamp в строку.

date(string $format, int|null $timestamp = null): string - сигнатура функции

Если $timestamp не указан, то будет форматироваться текущая дата т.е. которая сейчас установлена на сервере.

Пример, который выводит текущую дату на экран:

echo date('Y-m-d H:i:s'); 

Этот код выведет на экран текущую в таком виде: 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::ATOMY-m-d\TH:i:sP2021-06-26T12:09:59+03:00
DateTime::COOKIEl, d-M-Y H:i:s TSaturday, 26-Jun-2021 12:09:59 MSK
DateTime::ISO8601Y-m-d\TH:i:sO2021-06-26T12:09:59+0300
DateTime::RFC822D, d M y H:i:s OSat, 26 Jun 21 12:09:59 +0300
DateTime::RFC850l, d-M-y H:i:s TSaturday, 26-Jun-21 12:09:59 MSK
DateTime::RFC1036D, d M y H:i:s OSat, 26 Jun 21 12:09:59 +0300
DateTime::RFC1123D, d M Y H:i:s OSat, 26 Jun 2021 12:09:59 +0300
DateTime::RFC7231D, d M Y H:i:s \G\M\TSat, 26 Jun 2021 12:09:59 GMT
DateTime::RFC2822D, d M Y H:i:s OSat, 26 Jun 2021 12:09:59 +0300
DateTime::RFC3339Y-m-d\TH:i:sP2021-06-26T12:09:59+03:00
DateTime::RFC3339_EXTENDEDY-m-d\TH:i:s.vP2021-06-26T12:09:59.000+03:00
DateTime::RSSD, d M Y H:i:s OSat, 26 Jun 2021 12:09:59 +0300
DateTime::W3CY-m-d\TH:i:sP2021-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

echo date('Y-m-d'); // 2021-06-26

Для хранения в поле 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
Время------
aAnte meridiem (лат. "до полудня") или Post meridiem (лат. "после полудня") в нижнем регистреam или pm
AAnte 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 86012004-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()

Как еще проще работать с датами

Наиболее мощный способ работы с датами предоставляет расширение https://carbon.nesbot.com/ Если вам важна локализация дат, то в этом вам поможет это расширение https://github.com/jenssegers/date оно расширяет функциональность Carbon

С Carbon вы можете делать множество вещей очень удобно и быстро: https://carbon.nesbot.com/docs/