В PHP существует полный набор средств, предназначенных для работы с датами и временем в различных форматах. Дополнительные модули (входящие в дистрибутив PHP) позволяют также работать с календарными функциями и календарями различных народов мира. Мы рассмотрим только самые популярные из этих функций.
Представление времени в формате timestamp
Дата и время храняться в компьютере в специальном формате 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()
не указан, предполагается текущее время.
Пример:
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Дата и время</title>
</head>
<body>
<?php
echo date("d.m.y"); //возвращает текущую дату
echo '<br>';
echo date("d.m.Y"); //возвращает текущую дату
echo '<br>';
echo date("d.m.y H:i:s"); //возвращает текущую
echo '<br>';
echo date("j F Y года g:i:s A", 10000000000); /*возвращает 7 September 2014 года 8:50:08 AM */
?>
</body>
</html>
В окне веб-браузера это будет выглядеть ТАК.
Чтобы выполнить какие-либо вычисления над датами/временем, следует сначала перевести их в формат 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 после полудня Если требуются слова во множественном числе( что не обязательно), то следует добавить окончание s (
days, weeks
и т.д.); - слова:
-
ago тому назад now сейчас last последний next следующий this этот tomorrow завтра yesterday вчера - числа и знаки
+
и-
; - временные зоны:
-
gmt — Greenwich Mean Time
, среднее время по Гринвичу;pdt — Pacific Daylight Time
, дневное тихоокеанское время.Примеры:
<?php
$time="d.m.Y H:i:s";
$t= strtotime("+3months+2days 6pm");
echo date($time,$t);
?>Если нам требуется узнать, сколько суток между двумя моментами времени, то для этого следует перевести строковые значения дата-время в формат
timestamp
с помощью функцииstrtotime()
, найти разницу между ними, разделив ее на 60*60*24:<?php
$t= strtotime("16 Jan 2009 ");
$t1=strtotime("1 Apr 2009 ");
echo ($t1-$t)/(60*60*24); // 74.9583333333
?>
Комментарии(0)
Для добавления комментариев надо войти в систему и авторизоватьсяКомментирование статей доступно только для зарегистрированных пользователей:Зарегистрироваться