Большой архив статей, книг, документации по программированию, вебдизайну, компьютерной графике, сетям, операционным системам и многому другому
 
<Добавить в Избранное>    <Сделать стартовой>    <Реклама на сайте>    <Контакты>
  Главная Документация Программы Обои   Экспорт RSS E-Books
 
 

   Интернет технологии -> PHP -> Введение в PHP


By Adam Trachtenberg and David Sklar (8/3/99)
Перевод на русский язык Н.В.Костроминой (30.11.2000 г.).

Время и даты

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

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

<SELECT NAME="when">
<?php
$d = time();
for ($i = 0; $i < 10; $i++) {
echo '

Этот кусок кода служит для вывода на экран списка выбора, включающего 10 вариантов ответа -- сегодня и каждый из последующих 9 дней. До начала выполнения цикла мы сохраняем текущее время в переменной $d. В каждом варианте выбора, задаваемом строкой <OPTION>, значение "value" устанавливается равным соответствующей временной отметке в формате Unix, а на экран выводится месяц и день ("July 27," "July 28," и так далее.) После вывода каждой даты (каждой строки <OPTION>), значение $d увеличивается на 86,400 (столько секунд в сутках -- 24 часа * 60 минут * 60 секунд).

Применяя функции mktime() и date() Вы можете сформировать и вывести любую информацию, производную от введенной пользователем даты. Предположим, что Вы хотите определить, каким числом будет первая суббота (или любой другой день недели) после указанной даты. Во-первых, напишем функцию, которая будет выдавать соответствующую форму запроса:

<?php

function display_form() {
  global $PHP_SELF;


$dotw = array('Sunday','Monday','Tuesday','Wednesday','Thursday',
     'Friday','Saturday');
$months = array( 1 => 'January','February','March','April','May','June',
                'July','August','September','October','November','December');
?>
<FORM TARGET="<?php echo $PHP_SELF; ?>" METHOD=GET>
Find the first 
<SELECT NAME="dotw">
<?php
for ($i = 0; $i < 7; $i++) {
    echo "<OPTION> $dotw[$i]";
}
echo '</SELECT> after <SELECT NAME="month">';
for ($i = 1; $i <= 12; $i++) {
    echo "<OPTION VALUE=\"$i\"> $months[$i]";
}
echo '</SELECT> <SELECT NAME="day">';
for ($i = 1; $i <= 31; $i++) {
    echo "<OPTION> $i";
}
echo '</SELECT>, <SELECT NAME="year">';
$start_year = date('Y') - 10;
$end_year = $start_year + 20;
for ($i = $start_year; $i <= $end_year; $i++) {
    echo "<OPTION> $i";
}
echo '<INPUT TYPE="HIDDEN" NAME="stage" VALUE="process">';
echo '</SELECT> <INPUT TYPE="SUBMIT" VALUE="Do it!"7></FORM>';
}

?> 

В этой функции очень мало таких моментов, которые мы еще не обсуждали. Массив $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.
Осталось только записать оператор, связывающий эти две функции воедино:
<?php 
if (empty($stage)) { display_form(); }
else { process_form(); }
?>

Код для обработки даты и времени часто должен быть более изощренным, чем в приведенном примере, для того, например, чтобы обрабатывать переход на летнее время или временные зоны. Однако функции 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 



[   Содержание   ]    [   Вперёд   ]


 

 
Интересное в сети
 
10 новых программ
CodeLobster PHP Edition 3.7.2
WinToFlash 0.7.0008
Free Video to Flash Converter 4.7.24
Total Commander v7.55
aTunes 2.0.1
Process Explorer v12.04
Backup42 v3.0
Predator 2.0.1
FastStone Image Viewer 4.1
Process Lasso 3.70.4
FastStone Image Viewer 4.0
Xion Audio Player 1.0.125
Notepad GNU v.2.2.8.7.7
K-Lite Codec Pack 5.3.0 Full


Наши сервисы
Рассылка новостей. Подпишитесь на рассылку сейчас и вы всегда будете в курсе последних событий в мире информационных технологий.
Новостные информеры. Поставьте наши информеры к себе и у вас на сайте появится дополнительный постоянно обновляемый раздел.
Добавление статей. Если вы являетесь автором статьи или обзора на тему ИТ присылайте материал нам, мы с удовольствием опубликуем его у себя на сайте.
Реклама на сайте. Размещая рекламу у нас, вы получите новых посетителей, которые могут стать вашими клиентами.
 
Это интересно
 

Copyright © CompDoc.Ru
При цитировании и перепечатке ссылка на www.compdoc.ru обязательна. Карта сайта.
 
Rambler's Top100