Создание функции DateAdd для PHPКак я уже говорил в начале - причиной написания этой статьи было то, что я не мог найти в PHP функцию аналогичную DateDiff в ASP. Теперь, когда мы объяснили как PHP работает с датой и временем, было бы удобно импортировать в PHP две функции работы с датой используемые в ASP. Первая - это функция DateAdd. Интервалом является строковое выражение, определяющий интервал, который Вы xотите добавить. Например минуты или дни, номер это интервал, который Вы хотите добавить, а date и есть дата. Интервалом может быть один из нижеизложенных: yyyy | год | q | четверть | q | четверть | m | месяц | y | день года | d | день | w | день недели | ww | неделя года | h | час | n | минута | s | секунда |
Здесь w, y и d делают одно и то же, а именно добавляют 1 день к текущему дню, q добавляет 3 месяца, ww добавляет 7 дней. function DateAdd($interval, $number, $date) {
$date_time_array = getdate($date); $hours = $date_time_array['hours']; $minutes = $date_time_array['minutes']; $seconds = $date_time_array['seconds']; $month = $date_time_array['mon']; $day = $date_time_array['mday']; $year = $date_time_array['year'];
switch ($interval) { case 'yyyy': $year+=$number; break; case 'q': $year+=($number*3); break; case 'm': $month+=$number; break; case 'y': case 'd': case 'w': $day+=$number; break; case 'ww': $day+=($number*7); break; case 'h': $hours+=$number; break case 'n': $minutes+=$number; break; case 's': $seconds+=$number; break; } $timestamp= mktime($hours,$minutes,$seconds,$month,$day,$year); return $timestamp; }
?>
Мы можем соxранить этот код под именем dateadd.inc затем запустить следующий код: include('dateadd.inc'); $temptime = time(); echo strftime('%Hh%M %A %d %b',$temptime); $temptime = DateAdd('n',50,$temptime); echo '' ; echo strftime('%Hh%M %A %d %b',$temptime);
?>
Возвращаемым значением которого будет: 15h41 Saturday 03 Jun 16h31 Saturday 03 Jun
Создание функции DateDiff для PHPСогласно документации функция DateDiff "Возвращает количество интервалов между двумя датами". Синтаксис функции таков: DateDiff(interval,date1,date2)
Интервалы, которыми эта функция пользуется те же, что мы увидели в работе с функцией DateDiff. Ради простоты мы отбросим множество элементов функции DateDiff VB скриптов, которые иначе усложнили бы работы. В этом примере дополнительные аргументы функции DateDiff (определяющие начинается ли неделя с понедельника или воскресенья) не используются. Интервалы, которые мы собираемся разрешить следующие - "w", "d&q", "h", "n" и "s". Давайте посмотрим, что мы сможем сделать: Function DateDiff ($interval,$date1,$date2) { // получает количество секунд между двумя датами $timedifference = $date2 - $date1;
switch ($interval) { case 'w': $retval = bcdiv($timedifference,604800); break; case 'd': $retval = bcdiv($timedifference,86400); break; case 'h': $retval =bcdiv($timedifference,3600); break case 'n': $retval = bcdiv($timedifference,60); break; case 's': $retval = $timedifference; break; } return $retval;
} ?>
После сохранения этого кода под именем datediff.inc, можем запустить следующий код: include('datediff.inc'; include('dateadd.inc'); $currenttime = time(); echo 'Current time: '.strftime('%Hh%M %A %d %b',$currenttime).'<br>'; $newtime = DateAdd('n',50,$currenttime); echo 'Time plus 50 minutes: '. strftime('%Hh%M %A %d %b',$newtime).'<br>'; $temptime = DateDiff('n',$currenttime,$newtime); echo 'Interval between two times: '.$temptime;
?>
который, в случае корректного конфигурирования, должен отобразить следующее: Current time: 16h23 Saturday 03 Jun Time plus 50 minutes: 17h13 Saturday 03 Jun Interval between two times: 50
Если у вас установлена UNIX система, то компилирование Вам нужно будет сделать с поддержкой для bcmath функции. Файл README.BCMATH в Вашем дистрибутиве даст все необходимые детали. А PHP4 для Windows платформ может сделать bcmath расчеты без специальных добавок.
|