Дата и время. Работа с датами

В 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() не указан, предполагается текущее время.

Пример:

<?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() распознает следующие ключевые слова на английском языке:

Примеры:

<?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
?>

В окне веб-браузера это будет выглядеть ТАК.




  • Другие |
назадвверхвперед
Rambler's Top100