Главная > Программирование > РНР: настольная книга программиста
<< Предыдущий параграф
Следующий параграф >>
<< Предыдущий параграф Следующий параграф >>
Макеты страниц

23.3. Практическое применение функций даты и времени в PHP

Познакомившись с функциями, вам, наверно, не терпится увидеть, как все это можно применить на практике и как вообще строятся подобные скрипты. Для начала можно взять наиболее простой и популярный скрипт показа времени на вашей Web-страничке. Реализовать это да РНР достаточно легко. Например:

<?

$ch = Date("H") ; // читаем показания часов

$mi = Date ("i") ; // читаем показания минут

$h1 = "час"; // определяем переменные для часов

$h2 = "часа";

$h3 = "часов";

$m1 = "минут"; // определяем переменные для минут

$m2 = "минута";

$m3 = "минуты";

// проверяем, какое из слов подходит к показаниям часов

if ($ch == 1 or $ch == 21) {

    $h = $h1;

}

else {

    if ($ch > 1 and $ch <= 4 or $ch > 20 and $ch <= 24)

    {

        $h = $h2;

    }

    else {

        $h = $h3;

    }

}

// проверяем, какое из слов подходит к показаниям минут

if ($mi == 0 or $mi > 4 and $mi <= 20 or $mi > 24 and $mi <= 30 or $mi > 34 and $mi <= 40 or $mi > 44 and $mi <= 50 or $mi > 54 and $mi <= 60) {

    $m = $m1;

}

else {

    if ($mi == 1 or $mi == 21 or $mi == 31 or $mi == 41 or $mi == 51) {

        $m = $m2;

    }

    else {

        $m = $m3;

    }

}

// выводим результат на экран

echo "Сейчас $ch $h, $mi $m";

?>

Результат выполнения программы приведен на рис. 23.1.

С большинством того, что демонстрирует этот скрипт, вы уже знакомы по предыдущим примерам, но кое-что новое здесь есть. В первых же строчках скрипта определяется время. Сначала считываются показания часов, затем минут. Эти числа, соответственно, попадают в указанные нами переменные и уже могут быть выведены на экран. Но все не так просто. Если сделать логический вывод в соответствии с законами русского языка, то если 1, то час, а если 2, то часа, и т. д. В следующих

Рис. 23.1. Результат выполнения скрипта

строках скрипта определяются слова для дальнейшего использования. Подходят три варианта — час, часов, часа. Считанное показание текущего времени сохранено в переменной $ch, и работать будем именно с ней. В первой строке проверки смотрим, равно ли $ch единице или 21. Не трудно догадаться, что это те числа, при которых следует поставить слово час. Если да, то переменной $h присваивается значение $h1. To же самое с помощью логического оператора or мы проделываем с оставшимися двумя переменными.

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

Пример 23.6. Определение времени суток

<?php

$h=date ( 'Н' );

if ($h>=6 && $h<=11) echo "Доброе утро!";

if ($h>=12 && $h<=17) echo "Добрый день!";

if ($h>=18 && $h<=23) echo "Добрый вечер!";

if echo "Доброй ночи!";

?>

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

Пример 23.7. Вывод даты

<?php

// определяем массив для месяцев

$q[]="";

$q[]="января";

$q[]="февраля";

$q[]="марта";

$q[]="апреля";

$q[]="мая";

$q[]="июня";

$q[]="июля";

$q[]="aвгуста";

$q[]="сентября";

$q[]="октября";

$q[]="ноября";

$q[]="декабря";

// определяем массив для дней недели

$е[0]="воскресенье";

$е[1]="понедельник";

$е[2]="вторник";

$е[3]="среда";

$е[4]="четверг";

$е[5]="пятницa";

$e[6]="cyбботa";

// считываем месяц

$m=date{'m');

if ($m=="01") $m=1;

if ($m=="02") $m=2;

if ($m=="03") $m=3;

if ($m=="04") $m=4;

if ($m=="05") $m=5;

if ($m=="06") $m=6;

if ($m=="07") $m=7;

if ($m=="08") $m=8;

if ($m=="09") $m=9;

// считываем день недели

$we=date('w');

// считываем число

$chislo=date('d');

// извлекаем день из недели

$den_nedeli = $e[$we];

// извлекаем значение месяца

$mesyac = $q[$m];

echo "Сегодня ".$chislo." ".$mesyac.", ".$den_nedeli;

?>

Рассмотрим, как работает этот скрипт. Сначала нам нужно определить два массива, в которых будут храниться соответственно русское название месяца и русское название дня недели. Месяц не может быть нулевым, поэтому нам нужно позаботиться о вводе элемента массива с нулевым индексом. Если индекс массива не указан, он принимается равным внутреннему указателю. Если массив пуст и еще не определен, внутренний указатель находится на первом элементе (имеющем индекс нуль). Ввод нового элемента массива перемещает внутренний указатель на единицу вверх, и таким образом обеспечивается последующий ввод значения массива в ячейку массива, имеющую индекс на единицу больший, чем предыдущая. В принципе, можно обеспечить ввод данных в массив разными способами. Но указанный здесь — самый легкий. Мы просто присваиваем поочередно нужные нам данные элементам массива, и таким образом заполняем его. Точно также и со вторым массивам. Только тут уже индекс нужных ячеек массива указывается явно, и внутренний указатель устанавливается на тот индекс, который задан, а после ввода значения перемещается вверх на единицу. Разница между этими двумя методами в том, что если массив уже был определен ранее и индекс при вводе не указан, заполнится ячейка массива, на которой находится внутренний указатель. А он ведь может стоять и в конце! А если индекс указан явно, внутренний указатель перемещается на его значение и запись происходите явно указанную ячейку. Часто массивы бываютгораздо длиннее приведенных в примере, и удобнее воспользоваться специальной функцией, которая позволяет считать указанный в ней файл и ввести все, что есть в этом файле, в массив. Причем разделителем считается перевод строки, что очень удобно. Синтаксис этой функции — $имя массива = file ("имя файла");.

Дальше формируется массив с указанным именем и значениями, соответствующими строкам файла.

Когда массивы определены, нужно считать номер месяца. Он записывается с ведущим нулем, если номер месяца менее десяти, и поэтому нам нужно позаботиться об его отсечении. Тут можно применить разные алгоритмы и методы, но мы просто сравним полученное решение с рядом заранее известных вариантов и изменим номер месяца на правильный без нуля. Хотя так делать неправильно — есть более корректные методы, например проверить полученное значение на ведущий нуль, и если проверка истинна (самый первый символ в строке — нуль), удалить первый символ.

Далее по ходу скрипта считываются день недели и число. С числом делать ничего не нужно, так как дата будет понятна всем, а вот день недели и месяц должны подвергнуться обработке. Извлекаем из введенного нами ранее массива день недели. Номер дня недели указывает на ячейку нашего массива, где хранится нужное русское имя, и таким образом мы в любом случае получим правильное значение. Меняется номер дня недели и номер (индекс) ячейки, из которой считывается значение. Причем тут в отличие от массива с именем месяца нулю соответствует воскресенье, что мы и учли при вводе массива дней недели. Точно такую же операцию проводим и для месяца. Его номер указывает на ячейку массива, где хранится правильное имя месяца на русском языке. А дальше — выводим результат на экран в произвольной форме.

<< Предыдущий параграф Следующий параграф >>
Оглавление