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

TOP-10 программ
Symantec Norton Ghost 9.0
Partition Magic 8.0.2 Pro
Xilisoft 3GP Video Converter v3.1.7.0616b
Norton AntiVirus 2005
Xilisoft 3GP Video Converter v2.1.52.831b
Антивирус Касперского Personal 5.0.303 beta 2
RAR Password Cracker 4.12
ABBYY PDF Transformer v1.00.820
MP3 To Ringtone Gold v3.02
Mobtime Cell Phone Manager v5.3.1
 
Наши сервисы
Рассылка новостей. Подпишитесь на рассылку сейчас и вы всегда будете в курсе последних событий в мире информационных технологий.
Новостные информеры. Поставьте наши информеры к себе и у вас на сайте появится дополнительный постоянно обновляемый раздел.
Добавление статей. Если вы являетесь автором статьи или обзора на тему ИТ присылайте материал нам, мы с удовольствием опубликуем его у себя на сайте.
 
 

   Интернет технологии -> 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 



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


 
Популярные книги

Практические работы по Excel на уроках информатики

Подробнее

Windows XP для всех

Подробнее

Самоучитель работы на компьютере Издание 9

Подробнее


 
Новости ИТ
04.12.2008  В Windows 7 запуск приложений Direct3D 10/10.1 будет возможен на CPU
04.12.2008  eGo BlackBelt и Encrypt - пара новых портативных HDD Iomega с зашитой данных
04.12.2008  A-DATA выпускает двух- и трёхканальные наборы памяти DDR3-1800+ в серии XPG Plus
04.12.2008  MOTOROKR EM35
04.12.2008  Шведский производитель ковриков для мышей выпустил игровую гарнитуру
04.12.2008  eGo BlackBelt и Encrypt - пара новых портативных HDD Iomega с защитой данных
04.12.2008  Вышла вторая бета-версия Windows Vista SP2
04.12.2008  Внешний SSD-накопитель с поддержкой eSATA и USB
04.12.2008  Флэшка OCZ со встроенным кард-ридером
04.12.2008  Весрия «ПАУ» 1.8.2 будет содержать новый функционал
04.12.2008  Компания «Русские Информационные Технологии» подготовила бета-версию программы «Печать конвертов!»
04.12.2008  Телефон премиум-класса с двумя SIM-картами
04.12.2008  High-end десктопы Asus Eee Box
04.12.2008  Видеокарта NVIDIA Quadro FX 4800 для профессионалов
04.12.2008  Экстремальные внешние HDD от Iomega
04.12.2008  MSI EX300 - 13.3 дюйма для развлечения
04.12.2008  SATA 3.0 появится в следующем году
04.12.2008  Mini-ITX-плата Zotac на основе логики NVIDIA и с поддержкой Wi-Fi
04.12.2008  Корпус NZXT Zero 2: улучшенное охлаждение и строгий дизайн
04.12.2008  Конвертеры: Xilisoft Video Converter v.5.1.7.1128
 
Полезно

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