Дата и время в PHP
В распределенных системах, таких, как Интернет, время играет особую роль. Из-за незначительного расхождения системных часов игрок на рынке Forex может потерять десятки тысяч долларов в течение нескольких минут; система деловой разведки ошибется в составлении прогноза; серверы NNTP в процессе синхронизации потеряют важную информацию, нужную пользователю и т.д.
PHP-функции для работы с датой и временем
PHP содержит множество функций для работы с датой и временем. Наиболее употребимыми являются:
time() Возвращает текущее абсолютное время. Это число равно количеству секунд, которое прошло с полуночи 1 января 1970 года (с начала эпохи UNIX). getdate( ) Считывает информацию о дате и времени. Возвращает ассоциативный массив, содержащий информацию по заданному или по текущему (по умолчанию) времени. Массив содержит следующие элементы:
seconds | Секунды (0-59) |
minutes | Минуты (0-59) |
hours | Часы (0-23) |
mday | День месяца (1-31) |
wday | День недели (0-6), начиная с воскресенья |
mon | Месяц (1-12) |
year | Год |
yday | День года (0-365) |
weekday | Название дня недели (например, Friday) |
month | Название месяца (например, January) |
0 | Абсолютное время |
Пример 1
$d = getdate(); // использовано текущее время foreach ( $d as $key => $val ) echo "$key = $val
"; echo "
Сегодня: $d[mday].$d[mon].$d[year]";
seconds = 38
minutes = 58
hours = 4
mday = 24
wday = 1
mon = 7
year = 2023
yday = 204
weekday = Monday
month = July
0 = 1690163918
Сегодня: 24.7.2023
date() Форматирование даты и времени. Аргументы: строка формата и абсолютное время. Второй аргумент необязателен. Возвращает строку с заданной или текущей датой в указанном формате. Строка формата может содержать следующие коды:
a | Включено обозначение «am» или «pm» |
A | Включено обозначение «AM» или «PM» |
d | День месяца (01-31) |
D | Сокращенное название дня недели (три буквы) |
F | Полное название месяца |
g | Часы (12-часовой формат без ведущих нулей) |
G | Часы (24-часовой формат без ведущих нулей) |
h | Часы (12-часовой формат) |
H | Часы (24-часовой формат) |
i | Минуты (00-59) |
j | День месяца без ведущих нулей (1-31) |
l | Полное название дня недели |
L | Признак високосного года (0 или 1) |
m | Месяц (01-12) |
M | Сокращенное название месяца (три буквы) |
n | Месяц (1-12) |
s | Секунды (00-59) |
t | Количество дней в данном месяце (от 28 до 31) |
U | Абсолютное время |
w | Номер дня недели (0 — воскресенье, 6 — суббота) |
y | Год (два разряда) |
Y | Год (четыре разряда) |
z | День года (0-365) |
Z | Смещение часового пояса в секундах (от -43200 до 43200) |
Любая другая информация, включенная в строку формата, будет вставлена в возвращаемую строку. Если в строку формата нужно добавить символы, которые сами по себе являются кодами формата, то перед ними надо поставить обратную косую черту «\». Символы, которые становятся кодами формата при добавлении к ним обратной косой, нужно предварять двумя косыми. Например, если необходимо добавить в строку «n», то надо ввести «\\n», поскольку «\n» является символом новой строки.
Пример 2
mktime() Возвращает абсолютное время, которое затем можно использовать с функциями date() или getdate() . Принимает до шести целочисленных аргументов в следующем порядке:
часы
минуты
секунды
месяц
день месяца
год
Пример 3
date( "j F Y, \a\\t g.i a, l", mktime( 13, 30, 0, 1, 22, 1971 ) );
22 January 1971, at 1.30 pm, Friday
checkdate() Проверка правильности даты. Аргументы: месяц, день, год. Возвращает true , если дата правильная, т.е.
месяц — целое число от 1 до 12;
день — целое число, не превышающее общего количества дней в данном месяце. При этом високосные годы обрабатываются корректно;
год — целое число от 1 до 32767.
if ( !checkdate( $month, 1, $year ) )
Внимание! Дата может находиться в допустимом диапазоне, но остальные функции работы с датами не примут это значение. Так, нельзя использовать mktime() для годов до 1902, а также следует использовать ее осторожно для годов до 1970.
strftime() Формирование локальной даты и времени.
Аргументы: строка формата и абсолютное время. Второй аргумент необязателен. Возвращает строку с заданной или текущей датой в указанном формате. При этом названия месяцев и дней недели извлекается из локали, выбранной с помощью функции setlocate() . Строка формата может содержать следующие коды:
%a | Сокращенное название дня недели |
%A | Полное название дня недели |
%b | Сокращенное название месяца |
%B | Полное название месяца |
%c | Предпочтительный формат даты и времени |
%C | Номер века |
%d | День месяца (1-31) |
%D | То же, что и %m/%d/%y |
%e | Месяц (1-12) |
%h | То же, что и %b |
%H | Часы (24-часовой формат) |
%I | Часы (12-часовой формат) |
%j | День года (0-365) |
%m | Месяц (1-12) |
%M | Минуты |
%n | Символ новой строки |
%p | Включено обозначение «am» или «pm» |
%r | Время с использованием a.m./p.m.-нотации |
%R | Время в 24-часовом формате |
%S | Секунды (00-59) |
%t | Символ табуляции |
%T | То же, что и %H:%M:%S |
%u | Номер дня недели (1 — понедельник, 7 — воскресенье) |
%U | Номер недели. Отсчет начинается с первого воскресенья года |
%V | Номер недели по ISO 8601:1988. Первая неделя должна иметь не менее четырех дней, а понедельник считается первым днем |
%W | Номер недели. Отсчет начинается с первого понедельника года |
%w | Номер дня недели (0 — воскресенье, 6 — суббота) |
%x | Предпочтительный формат даты без времени |
%X | Предпочтительный формат времени без даты |
%y | Год (два разряда) |
%Y | Год (четыре разряда) |
%Z | Часовой пояс (имя или сокращение) |
%% | Символ «%» |
Любая другая информация, включенная в строку формата, будет вставлена в возвращаемую строку.
Пример 4
echo strftime("%A %d %B %Y %H:%M
"); //error_reporting(E_ALL & ~E_WARNING); //setlocale(LC_ALL,''); echo strftime("Сегодня %A %d %B %Y %X
"); echo strftime("%Z
");
Monday 24 July 2023 04:58
Сегодня Monday 24 July 2023 04:58:38
MSK
Еще примеры:
date() – форматирование даты PHP
date($format, $timestamp) – форматирует дату/время по шаблону, где:
Результат работы функции зависит от настроек часового пояса, установить его можно следующем образом:
Основные параметры шаблона
Символ | Описание | Пример возвращаемого значения |
---|---|---|
День | ||
j | День месяца без ведущего нуля | от 1 до 31 |
d | День месяца, 2 цифры с ведущим нулём | от 01 до 31 |
l | Полное наименование дня недели | от Sunday до Saturday |
D | День недели, 3 символа | от Mon до Sun |
z | Порядковый номер дня в году | От 0 до 365 |
Неделя | ||
N | Порядковый номер дня недели | от 1 (понедельник) до 7 (воскресенье) |
W | Порядковый номер недели года | Например: 42 (42-я неделя года) |
Месяц | ||
n | Порядковый номер месяца без ведущего нуля | от 1 до 12 |
m | Порядковый номер месяца с ведущим нулём | от 01 до 12 |
F | Полное название месяца | от January до December |
M | Сокращенное наименование месяца, 3 символа | от Jan до Dec |
t | Количество дней в месяце | от 28 до 31 |
Год | ||
Y | Год, 4 цифры | 2019 |
y | Год, 2 цифры | 19 |
Время | ||
g | Часы в 12-часовом формате без ведущего нуля | от 1 до 12 |
h | Часы в 12-часовом формате с ведущим нулём | от 01 до 12 |
G | Часы в 24-часовом формате без ведущего нуля | от 0 до 23 |
H | Часы в 24-часовом формате с ведущим нулём | от 00 до 23 |
i | Минуты с ведущим нулём | от 00 до 59 |
s | Секунды с ведущим нулём | от 00 до 59 |
v | Миллисекунды | 123 |
Полная дата/время | ||
c | Дата в формате ISO 8601 | 2004-02-12T15:19:21+00:00 |
r | Дата в формате RFC 2822 | Thu, 21 Dec 2000 16:01:07 +0200 |
дд.мм.ггг (dd.mm.yyyy)
Самый распространенные форматы: dd.mm.yyyy и dd.mm.yyyy hh:ss .
echo date('d.m.Y'); // 24.07.2023 echo date('d.m.Y H:i'); // 24.07.2023 04:58 echo date('d.m.Y H:i:s'); // 24.07.2023 04:58:06
гггг-мм-дд (yyyy.mm.dd)
Используется в MySQL тип поля DATE.
date_format
Возвращает строку даты, преобразованной согласно переданному формату.
Список параметров
Только для процедурного стиля: объект DateTime , возвращаемый date_create() .
Шаблон результирующей строки ( string ) с датой. Смотрите параметры форматирования ниже. Также существует несколько предопределённых констант даты/времени, которые могут быть использованы вместо этих параметров. Например: DATE_RSS заменяет шаблон ‘D, d M Y H:i:s’ .
Символ в строке 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 |
X | Расширенное полное числовое представление года, не менее 4 цифр, с — для годов до нашей эры и + для годов нашей эры. | Примеры: -0055 , +0787 , +1999 , +10191 |
x | Расширенное полное числовое представление, если требуется или стандартное полное числовое представление, если возможно (например, Y ). Не менее четырёх цифр. Для годов до нашей эры указан префикс — . У годов после (и включая) 10000 префикс + . | Примеры: -0055 , 0787 , 1999 , +10191 |
Y | Полное числовое представление года, не менее 4 цифр, с — для годов до нашей эры. | Примеры: -0055 , 0787 , 1999 , 2003 , 10191 . |
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 (доступен, начиная с PHP 8.0.0) | Например: Z или +02:00 |
T | Аббревиатура часового пояса, если известна; в противном случае смещение по Гринвичу. | Примеры: EST , MDT , +05 |
Z | Смещение часового пояса в секундах. Для часовых поясов, расположенных западнее UTC, возвращаются отрицательные числа, а для расположенных восточнее UTC — положительные. | от -43200 до 50400 |
Полная дата/время | — | — |
c | Дата в формате стандарта ISO 8601 | 2004-02-12T15:19:21+00:00 |
r | Дата в формате » RFC 222/» RFC 5322 | Например: Thu, 21 Dec 2000 16:01:07 +0200 |
U | Количество секунд, прошедших с начала Эпохи Unix (1 января 1970 00:00:00 GMT) | Смотрите также time() |
Любые другие символы, встреченные в строке-шаблоне, будут выведены в результирующую строку без изменений. Z всегда возвращает 0 при использовании gmdate() .
Замечание:
Поскольку рассматриваемая функция принимает в качестве параметра временные метки типа int , форматирующий символ u будет полезен только при использовании функции date_format() и пользовательских меток времени, созданных с помощью функции date_create() .
Возвращаемые значения
Возвращает строку с отформатированной датой в случае успешного выполнения.