Форум программистов
 
О проблемах, например, с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 15.07.2010, 11:45   #1
siteograf
Пользователь
 
Регистрация: 19.10.2009
Сообщений: 11
По умолчанию Проверка даты рождения относительно текущей.

Добрый день, спецы PHP! Помогите пожалста решить следующую проблему.

У меня есть переменная $born (дата рождения), выводится в формате 15.05.1971

Если кто знает, напишите пожалуйста код проверки, что если $born попадает в промежуток следующих 5ти дней от текущей даты, то переменная $x=1, если не попадает, то $x=0.

Это нужно для того чтобы вывести людей у которых скоро будет день рождения. Естественно для проверки год рождения во внимание принимать нельзя.
siteograf вне форума Ответить с цитированием
Старый 15.07.2010, 13:47   #2
Linel
Форумчанин
 
Аватар для Linel
 
Регистрация: 21.02.2009
Сообщений: 372
По умолчанию

PHP код:
<?php
$born 
"20.07.1971";
$born explode("."$born);
list(
$day$month) = $born;

$now time();

$year_now date("Y");
$next_birthday mktime(000$month$day$year_now);

$dif = ($next_birthday $now)/(60*60*24);

if (
$dif 0)
  
$x 0;
elseif (
$dif <= 5)
  
$x 1;
else
  
$x 0;


echo 
$x;

?>
Я бы делал так наверно

Значит, сначало я создаю массив, в котором будут храниться день, месяц и год рождения субъекта. Далее, нас будут интересовать только день и месяц рождения, так как задачи подсчитаь сколько ему лет у нас нету ) Потом я создаю метку времени для текущего момента. Она хранится в переменной $now (в секундах). В переменной $year_now хранится информация о текущем годе. Это необходимо, чтобы затем создать метку времени дня рождения твоего субъекта в этом году. $dif - это разница между днем рождения в этом году и текущем времени (в днях). Далее с помощью IF'a смотрим. Если разница меньше нуля, значит в этом году днюшка уже была. Наш $x = 0. Если же разница не меньше нуля, то это означает, что днюха еще будет. Тогда если разница меньше или равна 5, твой х = 1 иначе днюшка еще за горами, х = 0.
No name. Just Linel.
Linel вне форума Ответить с цитированием
Старый 15.07.2010, 18:10   #3
werewolf999
Пользователь
 
Регистрация: 04.05.2010
Сообщений: 46
По умолчанию

ну я бы сделал это чуть иначе - с использованием функции strtotime
PHP код:
<?php
$born 
"21.07.1971";

$born strtotime($born);
$now time();
$next_birthday mktime(000date('m',$born), date('d',$born), date('Y'));

if (
$next_birthday $now && $next_birthday strtotime('+5 day')) {
    
$x 1;
} else {
    
$x 0;
}

echo 
$x;
?>
изменения в принципе больше косметические, но есть и одно преимущество - не надо заморачиваться по поводу входящей даты (скрипт поймет и 21-07-1971)
werewolf999 вне форума Ответить с цитированием
Старый 16.07.2010, 02:45   #4
Johnatan
Antimoderаtoris
Участник клуба
 
Регистрация: 08.02.2008
Сообщений: 1,251
По умолчанию

strtotime крайне нестабильная функция. То и дело норовит дату за месяц принять. Не советую её использовать там, где можно использовать метод предыдущего автора (массив, перевод в юникс формат времени через mktime. Тот вариант точно не ошибётся.
Johnatan вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Горячая клавиша для текущей даты sergantikus Microsoft Office Excel 4 30.06.2010 12:57
присвоение переменной текущей даты KaimNotark Помощь студентам 1 29.01.2010 08:17
Зависимость формулы от текущей и прошедшей даты. segail Microsoft Office Excel 13 19.09.2009 14:36
Смещение рамки выделения ячейки (курсора), относительно текущей вниз. hugoboss Microsoft Office Excel 2 19.01.2008 11:31
Вставка текущей даты в БД! Oleg Romanchuk БД в Delphi 5 21.08.2007 18:59


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS