ресурс для начинающих веб-разработчиков
комплексные веб-услуги по созданию сайтов

Справочный материал по основным языкам программирования и верстки сайтов.

Готовая методика создания простых и сложных динамичных сайтов, с использованием PHP и MySQL.

Использование веб-редактора Adobe Dreamweaver в разработке сайтов.

Использование графических редакторов Adobe Flash, Adobe Photoshop, Adobe Fireworks в подготовке веб-графики.

Разработка веб-сайтов под "ключ".

Разработка отдельных фрагментов сайтов, консультации по вопросам верстки веб-страниц и веб-программирования.

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

Дата и время

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