В PHP имеется целый набор удобных функций для вывода дат и времени, а также для различных
преобразований данных о времени и дате.
Для того, чтобы отобразить в определенном формате дату и время, воспользуйтесь
функцией date(). Для нее требуется задать два аргумента: описание формата вывода даты и
указание того момента времени, информацию о котором Вы хотите вывести. Указание на момент
времени дается в форме "число секунд с начала 1970 года". (Если Вы хотите вывести текущее время,
Вы можете воспользоваться функцией time(), которая возвращает значение текущего времени.)
Функция date() имеет массу опций форматирования, таких же как у функции strftime() в C или у
функции POSIX::strftime() в Perl.
<?php
$birthday_stamp = mktime(19,45,0,3,10,1975);
$birthday_formatted = date('F d, Y - g:i a',$birthday_stamp);
echo "Давид родился $birthday_formatted."
?>
дает
Давид родился March 10, 1975--7:45 p.m.
Конечно, если Вы имеете в виду конкретную дату, хитрые функции форматирования не нужны,
поскольку Вы заранее точно знаете как должен выглядеть выводимый текст. Эти функции нужны,
к примеру, в том случае, когда Вы выводите часть информации из заполненной пользователем
формы, в которой пользователь должен был ввести дату:
Этот кусок кода служит для вывода на экран списка выбора, включающего 10 вариантов ответа --
сегодня и каждый из последующих 9 дней. До начала выполнения цикла мы сохраняем текущее время
в переменной $d. В каждом варианте выбора, задаваемом строкой <OPTION>, значение "value"
устанавливается равным соответствующей временной отметке в формате Unix, а на экран выводится
месяц и день ("July 27," "July 28," и так далее.) После вывода каждой даты (каждой
строки <OPTION>), значение $d увеличивается на 86,400 (столько секунд в сутках --
24 часа * 60 минут * 60 секунд).
Применяя функции mktime() и date() Вы можете сформировать и вывести любую информацию,
производную от введенной пользователем даты. Предположим, что Вы хотите определить, каким
числом будет первая суббота (или любой другой день недели) после указанной даты.
Во-первых, напишем функцию, которая будет выдавать соответствующую форму запроса:
В этой функции очень мало таких моментов, которые мы еще не обсуждали. Массив $months
записан немного по-другому, потому что мы хотим, чтобы индекс массива начинался с 1, а не с 0.
Основную часть этой формы гораздо легче сформировать программно, вместо того, чтобы перечислять
все значения элементов, так что единственная часть display_form(), которая формируется не в
режиме PHP, - это строка в самом начале формы. Задание значений переменных $start_year и
$end_year с помощью date('Y') служит для определения границ интервала времени, начинающегося
за 10 лет до текущего года и заканчивающегося через 20 лет после него.
А теперь напишем функцию для обработки формы:
<?php
function process_form() {
global $dotw;
global $month;
global $day;
global $year;
$timestamp = mktime(0,0,0,$month,$day,$year);
$next_dotw = '';
$next_timestamp = $timestamp;
while ($next_dotw != $dotw) {
$next_timestamp += 86400;
$next_dotw = date('l',$next_timestamp);
}
$formatted_first = date('F d, Y',$timestamp);
$formatted_next = date('F d, Y',$next_timestamp);
echo "The first $dotw after $formatted_first is $formatted_next.";
}
?>
Во-первых, преобразуем введенную дату в формат, принятый в Unix. Если Вы хотите проявить
осторожность, Вы можете здесь дополнительно проверить, попадает ли введенное значение в
определенные рамки, хотя мы здесь такой необходимости не видим.
Затем организуется цикл перехода к следующему дню недели, пока значение "next day" не
совпадет с днем недели, указанным пользователем. Пока они различаются, значение "next day"
увеличивается на 86400 секунд (вы помните, это равно 24 часа * 60 минут * 60 секунд) название
дня недели перевычисляется.
Когда эти два значения совпадут, process_form() выдаст следующее сообщение:
The first Sunday after June 25, 1999 is June 27, 1999.
Осталось только записать оператор, связывающий эти две функции воедино:
Код для обработки даты и времени часто должен быть более изощренным, чем в приведенном примере,
для того, например, чтобы обрабатывать переход на летнее время или временные зоны. Однако
функции date() и mktime() все равно остаются основными инструментами для преобразования меток
времени из формата, принятого в Unix, в понятный человеку формат и обратно. Функции date() и
mktime() оперируют с отметками времени в локальной временной зоне Вашей машины. Если Вы хотите
оперировать с временем по Гринвичу (Greenwich Mean Time - GMT), Вы можете использовать gmdate()
и gmmktime().
Например, если Вы (и Ваш компьютер) живете во временном поясе, в котором время отстает от
Гринвича на 4 часа, Вы можете написать:
<?php
$today = mktime(12,0,0,6,25,1999);
echo 'У нас сейчас '.date('g:i:s a, F d, Y',$today);
echo '';
echo 'По Гринвичу сейчас '.gmdate('g:i:s a, F d, Y',$today);
?>
Это код выдает следующее сообщение:
У нас сейчас 12:00:00 pm, June 25, 1999
По Гринвичу сейчас 4:00:00 pm, June 25, 1999