Перейти к содержимому

Сервис обмена электронных валют

Партнерская программа Kredov

PHP-функция для вычисления разницы между датами

#21 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8
0

Отправлено 09 Январь 2010 - 01:58

FordogeN,
нет, дебагь там где формируешь.
print_r выводит содержимое массива, объекта и так далее.
Если ещё и аналоги: var_dump(более подробные данные) и др.
function isNewDate_first($date)
{
$timestamp = strtotime($date); // получаем метку времени из переданной даты (из строки даты в метку)
$date = getdate($timestamp); // получаем массив информации о переданной дате
$now = getdate(); // получаем массив информации о текущей дате

/* дебаг */
echo "<pre>";
print_r($now);
print_r($date);
echo "</pre>";
/* END дебаг */

if( $date['year'] >= $now['year'] )
if( $date['mon'] >= $now['mon'] )
if( $date['mday'] >= $now['mday'] ) return true;

return false;
}

  • 0

#22 yury

yury
  • Пользователь
  • 629 сообщений
  • Репутация: 176

Отправлено 24 Январь 2010 - 11:48

Приведу пример из своей практики, он вроде похож на то, что требуется.
Надо было выводить дату события одним цветом, если событие запланировано, но еще не случилось и другим, если событие уже произошло
<?php
function color_date($key_date)
{
// количество секунд, на которое _текущая_дата_ отличается от 1 января 1970г.
$current_time = time();

// количество секунд, на которое _контрольная_дата_ отличается от 1 января 1970г. и добавляем 3 часа для времени по МСК
$key_time = strtotime($key_date)+10800;

// если контрольная дата больше текущей, то цвет "#993300", нет - "#330033"
echo "color=\"#" . ($key_time > $current_time ? "993300" : "330033") . "\"";
}
?>

...

<br><font <?php color_date("12.02.2010"); ?> >2 февраля 2010</font>, Описание события
<br><font <?php color_date("27.10.2009"); ?> >25 — 27 ноября 2009</font>, Описание другого события

  • 0

#23 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 25 Январь 2010 - 01:01

yury, моё мнение. Одна функция не должна отвечать за форматирование и вывод. ИМХО
  • 0

#24 yury

yury
  • Пользователь
  • 629 сообщений
  • Репутация: 176

Отправлено 25 Январь 2010 - 10:51

ZiTosS,
а пояснить? ;) (желательно на примере)


  • 0

#25 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 25 Январь 2010 - 12:59

yury,
Пояснения: код всегда должен быть структурирован, интуитивен и понятен. Когда я вижу функцию, где задача стоит просто определить положение даты - новая или нет, а там ещё и вывод текста + форматирование. Просто думаешь, и как же эта функция ограничена в использовании. Я бы написал так:
<?php

/* функция только определяет новая дата или нет */
function isNewDate($key_date)
{
// количество секунд, на которое _текущая_дата_ отличается от 1 января 1970г.
$current_time = time();

// количество секунд, на которое _контрольная_дата_ отличается от 1 января 1970г. и добавляем 3 часа для времени по МСК
$key_time = strtotime($key_date)+10800;

return $key_time > $current_time;
}

/* функция только возвращает стиль, но она не нуждается знать, где она будет использоваться, хоть в окрашивании дат, хоть в оформлении текста */
function addColor($color = "330033")
{
return " style='color: #{$color}'";
}

?>

...
<span<?php isNewDate("02.02.2010") ? echo addColor("993300") : addColor() ?>>2 февраля 2010</span>, Описание события
<span<?php isNewDate("02.02.2010") ? echo addColor("993300") : addColor() ?>>25 — 27 ноября 2009</span>, Описание другого события

Хотя конечно это не удачный пример :)
  • 0

#26 yury

yury
  • Пользователь
  • 629 сообщений
  • Репутация: 176

Отправлено 25 Январь 2010 - 13:41

yury,
Пояснения: код всегда должен быть структурирован, интуитивен и понятен. Когда я вижу функцию, где задача стоит просто определить положение даты - новая или нет, а там ещё и вывод текста + форматирование. Просто думаешь, и как же эта функция ограничена в использовании.

ZiTosS,
согласен.
У меня действительно код неструктурированный и функция строго под конкретный случай.
Так получилось потому что задача казалась простой, откуда естественное желание — записать ее кратко.
Там вообще код можно в одну строку записать, но тогда комментарии некуда было бы вставлять. ;)
  • 0


Оформление форума – IPBSkins.ru