Дата и время в 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<br>";
echo "<hr>Сегодня: $d[mday].$d[mon].$d[year]";

РЕЗУЛЬТАТ ПРИМЕРА 1:

seconds = 22
minutes = 6
hours = 10
mday = 12
wday = 4
mon = 12
year = 2024
yday = 346
weekday = Thursday
month = December
0 = 1733987182

Сегодня: 12.12.2024
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

date("Сегодня d.m.y H:i");

РЕЗУЛЬТАТ ПРИМЕРА 2:

Сегодня 12.12.24 10:06
mktime()
Возвращает абсолютное время, которое затем можно использовать с функциями date() или getdate(). Принимает до шести целочисленных аргументов в следующем порядке:

часы
минуты
секунды
месяц
день месяца
год

Пример 3

date( "j F Y, \a\\t g.i a, l", mktime( 13, 30, 0, 1, 22, 1971 ) );

РЕЗУЛЬТАТ ПРИМЕРА 3:

22 January 1971, at 1.30 pm, Friday
checkdate()
Проверка правильности даты. Аргументы: месяц, день, год. Возвращает true, если дата правильная, т.е.
месяц - целое число от 1 до 12;
день - целое число, не превышающее общего количества дней в данном месяце. При этом високосные годы обрабатываются корректно;
год - целое число от 1 до 32767.

Например:
if ( !checkdate( $month, 1, $year ) )
  {
  $d = getdate();
  $month = $d[mon];
  $year = $d[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<br>");
//error_reporting(E_ALL & ~E_WARNING);
//setlocale(LC_ALL,'');
echo strftime("Сегодня %A %d %B %Y %X<br>");
echo strftime("%Z<br>");

РЕЗУЛЬТАТ ПРИМЕРА 4:

Thursday 12 December 2024 10:06
Сегодня Thursday 12 December 2024 10:06:22
MSK

Еще примеры:

date("l dS F Y h:i:s A") :
Thursday 12th December 2024 10:06:22 AM

date("Сегодня d.m.Y") :
Сегодня 12.12.2024

date("Этот файл датирован d.m.Y", filectime(__FILE__)) :
Этот файл датирован 12.05.2021

// Активизируем текущую локаль (иначе дата будет на английском).
setlocale(LC_ALL, '');
// Выводим 2 предложения.
echo strftime("%B %Y года, %d число. Был %A, часы показывали %H:%M.");
December 2024 года, 12 число. Был Thursday, часы показывали 10:06.

Вчерашний день:

date("Y-m-d", strtotime("-1 day"));
2024-12-11

Найти ближайший рабочий день:

echo "Следующий рабочий день: ".
    date("d.m.Y",(intval(date("w")==0 ?
        strtotime("next day") :
            (intval(date("w")==6 ?
                strtotime("+2 day") : strtotime("now") )))));
Ближайший рабочий день: 12.12.2024


.