Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

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

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

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

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

Это нужно для того чтобы вывести людей у которых скоро будет день рождения. Естественно для проверки год рождения во внимание принимать нельзя.
siteograf вне форума Ответить с цитированием
Старый 15.07.2010, 14: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, 19: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, 03:45   #4
Johnatan
Antimoderаtoris
Участник клуба
 
Регистрация: 08.02.2008
Сообщений: 1,251
По умолчанию

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


Купить рекламу на форуме - 42 тыс руб за месяц



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