В PHP существует полный набор средств, предназначенных для работы с датами и временем в различных форматах. Дополнительные модули (входящие в дистрибутив PHP) позволяют также работать с календарными функциями и календарями различных народов мира. Мы рассмотрим только самые популярные из этих функций.
Дата и время храняться в компьютере в специальном формате timestamp как количество секунд, прошедшее от 1 января 1970 года 00:00:00 GMT(или, что то же самое — UCT). В приложениях требуется другое представление даты и времени, для чего в РНР предусмотрены специальные функции.
Текущее системное время в формате timestamp(т.е. как целое количество секунд) получается с помощью функции time(). Для получения в этом же формате любого другого времени служит функция
mktime(час, мин, сек, мес, день, год)
с целочисленными параметрами, смысл которых ясен. Например, вызов функции mktime(17, 26, 31, 1, 15, 2009) вернет число 1232029591 — количество секунд, прошедшее с 1 января 1970 года 00:00:00 до 15 января 2009 года 17:26:31 GMT.
<?php
echo mktime(17, 26, 31, 1, 15, 2009);
?>
Для представления даты и времени в требуемом формате как строки можно использовать функцию
date(формат, timestamp)
Здесь параметр
timestamp — целое число, соответствующее количеству секунд, прошедших с момента 1 января 1970 года 00:00:00 GMT, а
формат — строка символов форматирования даты и времени.
Строка формата может содержать обычный текст, перемежаемый одним или несколькими символами форматирования.
Символы форматирования даты и времени
Символ | Значение |
d | День месяца(две цифры, используется ведущий 0) |
j | День месяца(одна или две цифры) |
m | Месяц(две цифры, используется ведущий 0) |
n | Месяц(одна или две цифры) |
Y | Год(четыре цифры) |
y | Год(две цифры) |
w | Номер дня недели(0 — воскресенье, 6 — суббота) |
g | Часы(12-часовой формат без ведущего 0, от 1 до 12) |
G | Часы(24-часовой формат без ведущего 0, от 0 до 23) |
h | Часы(12-часовой формат с ведущим 0, от 01 до 12) |
H | Часы(24-часовой формат с ведущим 0, от 00 до 23) |
i | Минуты(от 00 до 59) |
s | Секунды(от 00 до 59) |
a | До или после полудня: аm или pm(в нижнем регистре) |
A | До или после полудня: АМ или РМ(в верхнем регистре) |
U | Целое число секунд, прошедшее от 1.01.1970 00:00:00 GMT |
M | Трехбуквенное сокращение английского названия месяца |
F | Английское название месяца |
D | Трехбуквенное сокращение английского названия дня недели |
l | Английское название дня недели |
Между символами форматирования можно использовать символы-разделители, например дефис(-), точку(.), косую черту(/), двоеточие(:), пробел и др.
Если второй параметр функции date() не указан, предполагается текущее время.
Пример:
<?php
echo date("d.m.y"); //возвращает текущую дату 16.01.09
echo '<br>';
echo date("d.m.Y"); //возвращает текущую дату 16.01.2009
echo '<br>';
echo date("d.m.y H:i:s"); //возвращает текущую 16.01.09 11:34:26
echo '<br>';
echo date("j F Y года g:i:s A", 10000000000); /*возвращает 7 September 2014 года 8:50:08 AM */
?>
В окне веб-браузера это будет выглядеть ТАК.
Чтобы выполнить какие-либо вычисления над датами/временем, следует сначала перевести их в формат timestamp. Рассмотрим пример, в котором выводится отформатированное время, соответствующее 11 часам 45 минутам 0 секундам, пяти суткам спустя после 16 февраля 2009 года:
<?php
$t= mktime(11, 45, 0, 1, 16, 2009) + 5*24*60*60;
echo date("d.m.Y H:i:s", $t); // 21.01.2009 11:45:00
?>
В окне веб-браузера это будет выглядеть ТАК.
Для перевода текстовых строк, содержащих дату и время, в формат timestamp служит функция
strtotime(дата-время, timestamp)
Эта функция принимает строку, которая содержит ключевые слова, связанные с датой и временем, и необязательный целочисленный параметр. Если он указан, то функция возвращает количество секунд относительно его значения, а в противном случае — относительно текущего времени. При возникновении ошибки преобразования функция возвращает -1.
Встроковом параметре дата-время функция timestamp() распознает следующие ключевые слова на английском языке:
названия месяца и их трехбуквенные сокращения;
названия дней недели и их трехбуквенные сокращения;
year | год |
month | месяц |
week | неделя |
day | день |
hour | час |
minute | минута |
second | секунда |
am | до полудня |
pm | после полудня |
ago | тому назад |
now | сейчас |
last | последний |
next | следующий |
this | этот |
tomorrow | завтра |
yesterday | вчера |
Примеры:
<?php
$time="d.m.Y H:i:s";
$t= strtotime("+3months+2days 6pm");
echo date($time,$t); // возвращает 18.04.2009 18:00:00
?>
В окне веб-браузера это будет выглядеть ТАК.
Если нам требуется узнать, сколько суток между двумя моментами времени, то для этого следует перевести строковые значения дата-время в формат timestamp с помощью функции strtotime(), найти разницу между ними, разделив ее на 60*60*24:
<?php
$t= strtotime("16 Jan 2009 ");
$t1=strtotime("1 Apr 2009 ");
echo ($t1-$t)/(60*60*24); // 74.9583333333
?>
В окне веб-браузера это будет выглядеть ТАК.