Определение даты и времени

Мы уже использовали функцию date ( ) в нескольких примерах, но она заслу
живает более детального рассмотрения. Функция date ( ) возвращает информа
цию о дате и времени в формате, продиктованном ее аргументами. Однако
просто удивительно, как поразному это можно использовать:


date("formatting");


В главе 6 было показано, что функция date ( " А " ) ; возвращает значения AM
и РМ. Список форматов даты полностью приведен в табл. С.5 (приложение С).
Эти параметры можно комбинировать, например функция date(" 1 F j , Y") ;
возвратит значение Friday January 26,2001.

Функция date ( ) может принимать еще один аргумент, называемый времен
ной меткой. Временная метка — это число, обозначающее количество секунд,
прошедших с первой секунды 1 января 1970 года с начала отсчета времени во
всех системах Unix. Как говорилось в главе 12, функция time() возвращает
значение временной метки на текущий момент. Функция mktime () может воз
вращать значение временной метки на конкретное время и дату:
mkt ime(час,минута,секунда,месяц,день,год);

Например, строка кода $Timestamp=mktime (12, 30, 0, 12, 27, 1997); при
своит переменной $Timestamp количество секунд от точки начала о.тсчета вре
мени до 12:30 27 декабря 1997 года. Затем это значение может быть отправле
но в функцию date ( " D " , $ Times tamp) ;, которая возвратит значение Sat
трехбуквенный формат для обозначения дней недели.

Давайте создадим интерактивный календарь посредством функций date ()
и mkt ime ( ) , которые будут использованы много раз.
Использование функции date

  1. Создайте новый PHPдокумент в текстовом редакторе.

  2. < ?php

  3. Присвойте переменной $PageTitle значение, включите файл заголовка.

  4. SPageTitle = "Calendar";
    require ("header.php");

  5. Раз уж мы разработали дизайн сайта и создали необходимые включаемые
    файлы, будем использовать их и дальше. Присвойте переменным $Month
    и $Year значения по умолчанию, если они не еще не определены.

  6. if ((!$Month) && (!$Year)) {
    $Month = date ("m");
    $Year = date ( " Y " ) ;

    Когда пользователь обращается к этому ресурсу в первый раз, значения ме
    сяца или года не передаются на страницу. РНР использует текущий месяц (на
    пример, 1) и год (например, 2001).

  7. Создайте временную метку, относящуюся к конкретному месяцу и году.

  8. $Timestamp = mktime ( О , О, О, $Month, I, $Year);

    Для получения временной метки мы задаем в функции mktime ( ) нули для
    часов, минут и секунд и единицу для дней. Месяц и год будут взяты из соответ
    ствующих переменных.

  9. Определите полное название месяца.

  10. $MonthName = dateC'F", $Timestamp) ;

    Если задать значение первого аргумента как F, функция date ( ) возвратит
    название месяца (например, January).

  11. Создайте таблицу для размещения календаря на экране.

  12. print ("<TABLE BORDER=0 CELLPADDING=3 CELLSPACING=0 ALIGN=CENTER>");

  13. Напечатайте заголовок с указанием месяца и года.

  14. print ("<TR BGCOLOR=BLUExTD COLSPAN=7 ALIGN=CENTER>
    <FONT COLOR=WHITExB>$MonthName $Year</Bx/FONTx/TDx/TR>") ;

  15. Наберите дни недели.

  16. print ("<TR BGCOLOR=BLUExTD ALIGN=CENTER WIDTH=20xB>
    <FONT COLOR=WHITE>Su</FONTx/Bx/TDxTD ALIGN=CENTER WIDTH=20xB>
    <FONT COLOR=WHITE>M</FONTx/Bx/TDxTD ALIGN=CENTER WIDTH=20xB>
    <FONT COLOR=WHITE>Tu</FONTx/Bx/TDxTD ALIGN=CENTER WIDTH=20xB>
    <FONT COLOR=WHITE>W</FONTx/Bx/TDxTD ALIGN=CENTER WIDTH=20xB>
    ~<FONT COLOR=WHITE>Th</FONTx/Bx/TDxTD ALIGN=CENTER WIDTH=20xB>
    <FONT COLOR=WHITE>F</FONTx/Bx/TDxTD ALIGN=CENTER WIDTH=20xB>
    <РОЙТ COLOR=WHITE>Sa</FONTx/Bx/TDx/TR>/n") ;

    Если внутри печатаемого текста нет переменных, а он очень длинный, ис
    пользуйте одинарные кавычки. Тогда можно свободно вставлять новые стро
    ки, так что видеть коды РНР и HTML будет легче.

  17. Определите первый день недели для этого месяца.

  18. $MonthStart = dateC'w", $Timestamp) ;

    Эта строка присвоит значение дня недели (в цифровой форме от 0 до 6)
    переменной $MonthStart для месяца и года. Так как первый день месяца был
    использован при задании временной метки, данный код определит этот кон
    кретный день. Таким образом удастся узнать, с какого дня недели начинается
    месяц: с понедельника, вторника и т.д.

  19. Проследите, чтобы значение переменной $MonthStart не было нулевым.

  20. if ($MonthStart == 0) {
    $MonthStart = 7;
    }

    Если значение переменной $MonthStart равно нулю, это означает, что ме
    сяц начинается с воскресенья и у нас будут проблемы с использованием данно
    го числа при выполнении сценария. Чтобы избежать проблем, заменим ноль
    семеркой.

  21. Определите последний день месяца.

  22. $LastDay = date("d", mktime (0, 0, 0, $Month+l, 0, $Year)) ;

    Переменной $LastDay будет присвоено цифровое значение (например, 31,
    28 или 30), равное последнему дню месяца. Это определено использованием
    нулевого дня и следующего месяца ($Month+l) в функции mktime (}.

  23. Задайте начальную дату как первый день месяца.

  24. $StartDate = $MonthStart;

    Так как календарь будет начинаться с воскресенья, необходимо опреде
    лить, какое количество дней пропустить до первого дня месяца. Если первый
    день месяца вторник, значение $MbnthStart равно 2, следовательно, значе
    ние $startDate равно 2, то есть будут созданы два пустых дня до начала ме
    сяца.

  25. Напишите цикл, который станет печатать строки календаря (недели).

  26. for ($k = 1; $k <= 6; $k++) {
    print ("<TR BGCOLOR=WHITE>");

    В календаре будет 6 строк, поэтому цикл исполнит этот раздел кода 6 раз.

  27. Создайте второй цикл, который будет печатать колонки календаря (дни).

  28. for ($i = 1; $i <= 7; $i++) {

    В календаре будет 7 колонок, одна на каждый день недели.

  29. Увеличьте значение переменной $StartDate на единицу.

  30. $StartDate++;

    Значение переменной $startDate печатает дату для каждого дня календа
    ря. Поэтому любая итерация цикла увеличивает это значение.

  31. Создайте условную конструкцию for, которая будет определять, когда пе
    чатать строку $StartDate.

  32. if (($StartDate <= 0) | | ($StartDate > $LastDay)) {
    print ("<TD BGCOLOR=GREEN>&nbsp</TD>");
    } el'seif (($StartDate >= 1) && ($StartDate <= $LastDay)) {
    print ("<TD ALIGN=CENTER>$StartDate</TD>");
    }

    Если значение переменной $StartDate меньше нуля (другими словами, ме
    сяц еще не начался) или больше количества дней в месяце ($LastDate), на эк
    ране монитора будет отображена пустая зеленая область. В том случае если
    значение переменной $StartDate больше нуля, но меньше количества дней
    в месяце ($LastDate), будет напечатана дата.

  33. Закройте второй цикл, строку таблицы и первый цикл.

  34. }
    print ("</TR>n");
    }

  35. Закончите таблицу.

  36. print ("</TABLE>n");

  37. А теперь сделаем простую HTMLформу, которая передает страницу об
    ратно в себя.

  38. print ("<FORM ACTION="calendar.php" METHOD=GET>n");

  39. Создайте два ниспадающих меню: одно для месяца, другое для года.

  40. print ("Select a new month to view:n");
    print ("<SELECT NAME=Month>
    <OPTION VALUE=l>January</OPTION>n
    <OPTION VALUE=2>February</OPTION>n
    <OPTION VALUE=3>March</OPTION>n
    <OPTION VALUE=4>April</OPTION>n
    <OPTION VALUE=5>May</OPTION>n
    «DPTION VALUE=6>June</OPTION>n
    <OPTION VALUE=7>July</OPTION>n
    <OPTION VALUE=8>August</OPTION>n
    <OPTION VALUE=9>September</OPTION>n
    «DPTION VALUE=10>October</OPTION>n
    <OPTION VALUE=ll>November</OPTION>n
    <OPTION VALUE=12>December</OPTION>n</SELECT>n") ;
    print ("<SELECT NAME=Year>
    <OPTION VALUE=2001>2001</OPTION>n
    <OPTION VALUE=2002>2002</OPTION>n
    <OPTION VALUE=2003>2003</OPTION>n
    </SELECT>n");

    Вы можете задать здесь любые годы. Обратите внимание, что два представ
    ленных меню сгенерируют переменные $Month и $Year, как только форма
    будет передана. И с этого времени благодаря условной конструкции, начина
    ющейся со строки 5, новые значения будут использоваться вместо значений по
    умолчанию.

  41. Создайте кнопку Submit и закройте форму.

  42. print •("< INPUT TYPE=SUBMIT NAME=SUBMIT VALUE="Submiti">n");
    print ("</FORM>n");

  43. Включите файл нижнего колонтитула и закройте тэг РНР.

  44. require ("footer.php");
    ?>

  45. Сохраните сценарий как calendar.php (листинг 13.5), загрузите его на сер
    вер и протестируйте в браузере (рис. 13.6 и 13.7).



Вместо определения последнего дня месяца, как мы сделали на строке 20 (обра
тившись к нулевой секунде первого дня следующего месяца), можно использовать
формат date (” t ” ) ; , который возвращает количество дней в месяце. Для исполь
зования этого нового значения придется слегка изменить сценарий.

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: