Отправляет email-рассылки с помощью сервиса Sendsay

PHP за чашкой кофе

Пожалуйста, ответьте на вопрос нашей анкеты:
Ваше социальное положение

  Все выпуски  

PHP за чашкой кофе Чашечка девятая — функции даты и времени


Информационный Канал Subscribe.Ru

PHP за чашкой кофе

Чашечка девятая — функции даты и времени

PHP за чашкой кофе

Здравия желаю!

Дольше обычного не выходила наша рассылка. Это всё потому, что у меня полетел винчестер. Событие, конечно, не смертельное, но крайне неприятное. Сразу же после восстановления данных я сел за написание нового выпуска.

Сегодня мы продолжим разговор о функциях. Для начала предлагаю посмотреть, как решались предыдущие домашние задания.

Таблица умножения

Задание:Cделать универсальную функцию, которая выводила бы таблицу умножения. Функция должна принимать два параметра: начальное и конечное значение в таблице.

Как решается задача? Просто. Смотрим:

  1. Нужно сделать функцию. Как создавать собственные функции мы уже знаем.
  2. В качестве параметров функции должны быть указаны два параметра. Об этом явно говорится в задании.
  3. Функция в процессе работы должна вывести таблицу умножения.

Посмотрите, какой код получился у меня:

Пример 1. Функция для создания таблицы умножения:
<?php
function tablitsa ($start, $end) {
// мы создали функцию с именем tablitsa и параметрами:
// $start — начальное значение в таблице умножения
// $end — конечное значение в таблице умножения

echo ("<table border=1>");
// начало таблицы
// его, кстати, можно было записать и так:
//
?><table border=1><?

for ($i=$start; $i<=$end; $i++) {
// запускаем цикл от $start до $end — это будут строки

echo ("<tr>");
// строка началась

for ($k=$start; $k<=$end; $k++) {
// второй цикл будет вписывать столбцы

echo ("<td>");
echo (
$i * $k);
echo (
"</td>");
// выводим ячейку с произведением

}
// закрываем внутренний цикл

echo ("</tr>");
// закрываем тег строки таблицы
}
// закрываем внешний цикл

echo ("</table>");
// закрываем таблицу
}
?>

Вот так. Я думаю, что разобраться с кодом не будет слишком сложно, тем более, что главное сейчас — это понять, каким образом объявляется функция, как действуют параметры функции и т. д.

Чтобы проверить, правильно ли мы всё сделали, попробуйте запустить функцию такой командой: tablitsa(5, 10);

Результат должен быть примерно таким:

Рисунок 1. Результат вывода таблицы
Попробуйте вызывать функцию с другими параметрами и посмотрите результаты вывода.

Чтобы ещё лучше понять, как работает функция, проследим за действиями PHP в процессе обработки кода:

  1. PHP встречает среди кода слово function, которое гласит, что сейчас будет определена функция
  2. PHP создаёт новую функцию с именем tablitsa.
  3. Как только встречается вызов функции, PHP проверяет:
    1. А есть ли вообще такая функция?
    2. Все ли необходимые параметры переданы функции?
  4. Если эти условия выполняются, PHP запускает функцию.

Заметьте: Вы можете вызывать функцию до того, как Вы её описали. Например, следующий код абсолютно правилен:

Пример 2. Пример вызова функции до её определения:
<?php
sample
();

function
sample() {
echo (
"hello");
}
?>

Многие функции зачастую используются сразу в нескольких файлах. В таких случаях часто эту функцию (одну или несколько) выносят в отдельный файл. Потом в скрипте, где должна использоваться функция, вставляют команду include ("файл_с_функциями"); и таким образом получают возможность использовать все функции, которые есть в этом файле.

Дата и время

Помните, на прошлом уроке мы рассматривали работу функции date()? Давайте посмотрим ещё раз:

<?php
$d
=date("d.m.Y H:i");
echo (
$d);
?>

В этой функции "d.m.Y H:i" — это параметр, который принимает функция date(). Настала пора разобраться в том, какие варианты этого параметра мы можем использовать.

Все функции, которые мы будем рассматривать я буду описывать так, как это принято у программистов. Так и нагляднее и понятнее. Первый раз я, естественно, всё поясню. Итак,…

Функция date()

string date ( string format [, int timestamp])

Я думаю, что стоит пояснить эту запись. Итак, первое слово — string говорит нам о том, что в результате выполнения функция возвращает строковое значение. Затем следует название функции — date. Теперь смотрим на параметры функции:

  1. string format — говорит нам о том, что мы должны передать функции строку. Внутри функции эта строка будет доступна под именем $format.
  2. int timestamp — говорит нам о том, что мы должны передать функции некоторое целое число. Внутри функции это число будет доступно под именем $timestamp.

Заметьте: второй параметр указан в квадратных скобках. Это говорит о том, что параметр $timestamp является необязательным (вспомните, на прошлом уроке мы говорили про необязательные параметры).

Нам, в принципе, не очень важно, под каким именем атрибут будет известен внутри функции, ведь функция date() — встроенная в PHP. Так что это я рассказываю просто для информации.

Действие функции: в зависимости от формата ($format) и заданного времени ($timestamp) выводит результат (дату и время).

Теперь подробнее о параметре $format. Этот параметр представляет собой, ну, скажем, «шаблон», по которому формируется дата. PHP, встретив в шаблоне определённые символы, заменяет их на данные даты или времени. Вот, например, если Вы напишите:

Пример 3. Вывод текущего года:
<?php
$format
="Y";
$date=date($format);
echo (
$date);
?>
В результате Вы получите вместо буквы Y число — 2005! То есть текущий год! И точно также мы можем использовать другие символы для формирования даты и времени нужного нам формата!

В следующей таблице представлены символы параметра $format и примеры их замены.

Таблица 1. В параметре $format распознаются и заменяются следующие символы:
Символ:Что он обозначает:Возможный результат:
aAnte meridiem или Post meridiem в нижнем регистре (строчными буквами)am или pm
AAnte meridiem или Post meridiem в верхнем регистре (прописными буквами)AM или PM
dДень месяца, 2 цифры с ведущими нулямиот 01 до 31
DСокращенное наименование дня недели, 3 символа (англ)от Mon до Sun
FПолное наименование месяца (англ)от January до December
gЧасы в 12-часовом формате без ведущих нулейот 1 до 12
GЧасы в 24-часовом формате без ведущих нулейот 0 до 23
hЧасы в 12-часовом формате с ведущими нулямиот 01 до 12
HЧасы в 24-часовом формате с ведущими нулямиот 00 до 23
iМинуты с ведущими нулямиот 00 до 59
I
(заглавная i)
Признак летнего времени. Если заменено на 1, значит, дата соответствует летнему времени, если на ноль — нет.1 или 0
jДень месяца без ведущих нулейот 1 до 31
l
(строчная L)
Полное наименование дня недели (англ)от Sunday до Saturday
LПризнак високосного года. Заменяется на 1, если год високосный, иначе 01 или 0
mПорядковый номер месяца с ведущими нулямиот 01 до 12
nПорядковый номер месяца без ведущих нулейот 1 до 12
MСокращенное наименование месяца, 3 символа (англ)от Jan до Dec
OРазница с временем по Гринвичу. Первые две цифры — часы, последующие — минутыНапример: +0800
rДата в формате RFC 2822Например: Mon, 25 Apr 2005 21:57:04 +0900
sСекунды с ведущими нулямиот 00 до 59
tКоличество дней в месяцеот 28 до 31
UКоличество секунд, прошедших с начала Эпохи Unix (то есть с 1 января 1970, 00:00:00 по Гринвичу)Например: 1114433991
wПорядковый номер дня неделиот 0 (воскресенье) до 6 (суббота)
WПорядковый номер недели года (первый день недели - понедельник)от 1 до 52
YПорядковый номер года, 4 цифрыНапример: 2005
yПорядковый номер года, 2 цифрыНапример: 05
zПорядковый номер дня в году (нумерация начинается с 0)от 0 до 365

Таблица большая, так что давайте разберёмся: в строке $format все вышеперечисленные символы всегда будут заменяться. Все остальные символы (которых нет в таблице) останутся как есть. Это даёт нам большие преимущества. Вот посмотрите на такой формат даты:

Сегодня: j F Y года

Как Вы думаете, что вернёт нам функция date(), если ей будет передан такой формат? Результат может быть примерно таким:

Сегодня: 25 April 2005 года

Как видите, всё, что не было спецсимволами, осталось «как есть». Другой пример:

С начала года прошло z дней.

В результате, у меня получилось вот что:

С начала года прошло 114 дней.

Здесь я привожу только значение переменной $format. Чтобы получить результат выполнения, Вы должны вписать это значение в функцию date(), например так: echo (date("С начала года прошло z дней."));

А что, если нам нужно в формате написать один из заменяемых символов так, чтобы он не был заменён функцией date()? На этот случай есть простое решение: перед символом, который заменять не надо, нужно поставить знак «\». Вот так:

\M\a\m\a: d M Y H:i a

И вот желаемый результат:

Mama: 25 Apr 2005 22:15 pm

Все символы, перед которыми стоял слэш не были изменены, все остальные — были.

Теперь о том, что такое «ведущие нули». Многие, я думаю, уже догадались, но всё-таки поясню: часто в документах нам приходится писать день или месяц двумя цифрами. То есть, если нужно написать «третье апреля», то приходится делать это так: 03.04. Вот в PHP и включили заранее поддержку ведущий нулей. И поэтому у многих элементов (например, у дня, месяца, минут, часов и т.д.) есть два варианта: с ведущими нулями и без них.

Признак «високосности» года

Чтобы определить, какой сейчас год — високосный или нет, мы также можем использовать функцию date(). Для этого мы должны сделать так:

  1. Передать функции date() формат: L
  2. Полученный результат проверить: если он равен единице, значит год високосный, если нулю — обычный

А теперь код:

Пример 4. Определение "високосности" года:
<?php
$visokos
=date("L");
if (
$visokos==1) {
echo (
"Сейчас на дворе високосный год!");
} else {
echo (
"Увы, високосный год уж точно не сегодня...");
}
?>

Согласитесь, легко и понятно!

Но есть у функции date() и ещё одно великолепное свойство. Дело в том, что все предыдущие примеры показывали нам данные на текущий момент, а ведь, между тем, мы можем узнать всё это для практически любой даты! В этом нам поможет второй параметр функции — $timestamp. Это параметр должен представлять собой дату в формате Unix, то есть количество секунд, прошедших с начала Эпохи Unix (то есть с 1 января 1970, 00:00:00 по Гринвичу). Раз количество секунд, — значит число. Просто число.

Давайте посмотрим на пример:

Пример 5. Использование параметра timestamp в функции date():
<?php
$timestamp
=123456789;
// это метка времени в формате Unix
$format="d.m.Y G:i:s";
// это формат выводимого значения
$result=date($format, $timestamp);
// получаем результат и записываем его в переменную $result
echo ($result);
// и выводим её
?>

В результате Вы получите вот что:

30.11.1973 5:33:09

То есть, в этот момент — тридцатого ноября 1973 года в пять часов тридцать три минуты и 9 секунд — время в формате Unix (или, всё равно, что "время в секундах, прошедшее с 1 января 1970 года 0:0:0") было равно 123456789.

Изначально, может быть, не совсем понятно такое свойство, вскоре даёт великолепные результаты. Например, Вам нужно выводить одну и ту же дату в разных форматах. Проще всего записать эту дату в формате Unix и использовать её совместно с функцией date().

Подводя итог

Хочу сказать, что при создании информационных сайтов, функции для работы с датой и временем используются очень часто. И потому, чтобы закрепить результат с функциями, советую Вам прорешать следующие задания:

  1. Укажите примерный результат, который может получится, если функции date() передать следующие форматы:
    • l, d F Y, g:i a
    • d.m.y
    • z день, месяц F
    • В текущем месяце t дней
  2. По результату определить маску ($format), которая была передана функции date():
    • Новость добавлена 17 April 2003 года в 22:7
    • Date: 05.07.03 07:20:22
    • Разница со временем по Гринвичу: +0500
    • 1 Mar 2003
  3. Получить дату и время, которые были (или будут) в тот момент, когда время Unix равно:
    • 10342441
    • 128896578
    • 1214437584

Некоторые из этих заданий не так просты, как кажутся на первый взгляд. О результатах пишите мне: eugene@phpbook.com.ru.

Да, и в случае каких-либо проблем, также обязательно пишите мне, спрашивайте, потому что, не поняв сейчас, Вам будет сложнее изучать язык дальше. Если Вы стесняетесь задать вопрос по e-mail, задавайте его на форуме, посетители которого обязательно помогут Вам!

Удачи, и до новых встреч в онлайне ;)


http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: inet.webbuild.phplearn
Отписаться

В избранное