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

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

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

Помогите сопоставить дату сервера и событие из базы данных

#1 werd_34

werd_34
  • Пользователь
  • 34 сообщений
  • Репутация: 0
0

Отправлено 03 Апрель 2013 - 00:10

Необходимо выводить знаменательные даты, праздники и т.д. Как ни бьюсь, не получается сопоставить переменные дат сервера и мои из базы данных. Помогите, пожалуйста!

<?php
$db_host = 'localhost';
$db_user = 'root';
$db_pass = '';
$db = 'kalendar';
mysql_connect($db_host, $db_user, $db_pass) or die("No connect to server");
mysql_select_db($db) or die("No select DB");
mysql_query("SET NAMES 'utf8'") or die("Can't set charset");

$res = mysql_query("SELECT * FROM `history` WHERE `id` = '{$id}'");
$row = mysql_fetch_assoc($res);
$day = $row['day'];
$mount = $row['mount'];
$year = $row['year'];
$event = $row['event'];

$tday = date("d");
$tmount = date("m");
if($day = $tday and $mount = $tmount){
    echo $event;
} else echo 'Событий нет!';
?>

Прикрепленные изображения

  • kalendar.jpg

 

 

  • 0

#2 yury

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

Отправлено 03 Апрель 2013 - 21:53

werd_34,
для начала исправьте проверку на равенство:
так неправильно
if($day = $tday and $mount = $tmount){
так правильно
if($day == $tday and $mount == $tmount){
если это не поможет, потрассируйте (например, с помощью echo сразу после присваивания), что у вас попадает из БД в переменные $day и $mount и похожи ли эти строки на то, что возвращают date("d") и date("m")
$day = $row['day'];
$mount = $row['mount'];

$tday = date("d");
$tmount = date("m");

  • 0

#3 werd_34

werd_34
    Topic Starter
  • Пользователь
  • 34 сообщений
  • Репутация: 0

Отправлено 03 Апрель 2013 - 23:45

Всё перепробовал, проверка на равенство не помогает, из базы по условию ничего не выводит
  • 0

#4 isvetlichniy

isvetlichniy
  • Пользователь
  • 619 сообщений
  • Репутация: 93

Отправлено 03 Апрель 2013 - 23:50

из базы по условию ничего не выводит

а ничего и не выведет
$res = mysql_query("SELECT * FROM `history` WHERE `id` = '{$id}'");
ты здесь используешь переменную $id, но не присваиваешь ей никакого значения
  • 0

#5 werd_34

werd_34
    Topic Starter
  • Пользователь
  • 34 сообщений
  • Репутация: 0

Отправлено 04 Апрель 2013 - 02:23

Спасибо за корректировку действий, начальный этап получился. Подскажите, как подсчитать сколько лет прошло от события. "Сегодня 240 лет со дня основания..."
В какую сторону думать?

$tday = date("d.m");
$res = mysql_query("SELECT * FROM `history` WHERE `day` = '{$tday}'");
$row = mysql_fetch_assoc($res);
$day = $row['day'];
$event = $row['event'];
if($day == $tday ){
    echo $event;
} else echo 'Событий нет!';

  • 0

#6 yury

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

Отправлено 04 Апрель 2013 - 08:49

Спасибо за корректировку действий, начальный этап получился. Подскажите, как подсчитать сколько лет прошло от события. "Сегодня 240 лет со дня основания..." В какую сторону думать?

Вот тут Расчет сколько лет, зная дату рождения писал похожий пример.
<html>
<body>
<?php
//вычисляет сколько лет прошло с заданной даты
//формат даты: дд-мм-гггг или дд.мм.гггг или дд/мм/гггг
function age($birth_date){
$birth = preg_split ('/[/.-]/', $birth_date);
$now = getdate();
$age = $now['year'] - $birth[2];
if($now['mon'] < $birth[1])
  $age--;
if($now['mon'] == $birth[1])
  if($now['mday'] < $birth[0])
   $age--;
return $age;
}
//выводит строку "год"/"года"/"лет" в зависимости от числового значения возраста, например: "22 года" или "45 лет"
function s_years($age){
$age = abs($age);
$t1 = $age % 10;
$t2 = $age % 100;
return ($t1 == 1 && $t2 != 11 ? "год" : ($t1 >= 2 && $t1 <= 4 && ($t2 < 10 || $t2 >= 20) ? "года" : "лет"));
}
$s_bdate = "25.08.1530";
$age = age($s_bdate);
echo "Если бы Иван Грозный, родившийся $s_bdate, не умер, то сейчас ему было бы $age " . s_years($age);
$s_bdate = "26-08-1828";
$age = age($s_bdate);
echo "<br>Лев Толстой родился $s_bdate. Это было $age " . s_years($age) . " назад.";
$s_bdate = "13/11/1729";
$age = age($s_bdate);
echo "<br>А. В. Суворов — великий русский полководец, не потерпевший ни одного поражения в своей военной карьере, родился $s_bdate. С тех пор прошло $age " . s_years($age);
?>
</body>
</html>
Думайте в эту сторону.
  • 1

#7 isvetlichniy

isvetlichniy
  • Пользователь
  • 619 сообщений
  • Репутация: 93

Отправлено 04 Апрель 2013 - 09:09

вот тебе еще статья по работе с датой
  • 0

#8 werd_34

werd_34
    Topic Starter
  • Пользователь
  • 34 сообщений
  • Репутация: 0

Отправлено 04 Апрель 2013 - 11:35

Спасибо огромное, yury и isvetlichniy! Ушёл в чтение!!
  • 0

#9 werd_34

werd_34
    Topic Starter
  • Пользователь
  • 34 сообщений
  • Репутация: 0

Отправлено 04 Апрель 2013 - 14:24

Вот что (СПАСИБО ОГРОМНОЕ yury :mellow: ) у меня получилось! Даты выводятся, скрипт считает годы.
Но проблема осталась - как вывести на один день насколько событий одновременно и показать события вчера... завтра...


$tday = date("d.m");
$res = mysql_query("SELECT * FROM `history` WHERE `day` ='{$tday}' LIMIT 3") or die(mysql_error());
$row = mysql_fetch_assoc($res);
$day = $row['day'];
$year = $row['year'];
$event = $row['event'];
//вычисляет сколько лет прошло с заданной даты
//формат даты: дд-мм-гггг или дд.мм.гггг или дд/мм/гггг
function age($birth_date){
$birth = preg_split ('/[\/.-]/', $birth_date);
$now = getdate();
$age = $now['year'] - $birth[2];
if($now['mon'] < $birth[1])
  $age--;
if($now['mon'] == $birth[1])
  if($now['mday'] < $birth[0])
   $age--;
return $age;
}
//выводит строку "год"/"года"/"лет" в зависимости от числового значения возраста, например: "22 года" или "45 лет"
function s_years($age){
$age = abs($age);
$t1 = $age % 10;
$t2 = $age % 100;
return ($t1 == 1 && $t2 != 11 ? "год" : ($t1 >= 2 && $t1 <= 4 && ($t2 < 10 || $t2 >= 20) ? "года" : "лет"));
}
if($day == $tday ){
	echo $event."<br/>";
$s_bdate = $year;
$age = age($s_bdate);
echo "Данное событие произошло $s_bdate. Это было $age " . s_years($age) . " назад.<br/>";
} else echo 'Событий нет!';

Прикрепленные изображения

  • kalendar1.jpg
  • kalendar2.jpg

  • 0

#10 werd_34

werd_34
    Topic Starter
  • Пользователь
  • 34 сообщений
  • Репутация: 0

Отправлено 05 Апрель 2013 - 08:12

Вывел на один день насколько событий одновременно циклом

if(mysql_num_rows($res) > 0){
while($row = mysql_fetch_assoc($res)){
$count = mysql_num_rows($res);
$day = $row['day'];
$year = $row['year'];
$event = $row['event'];
$s_bdate = $year;
$age = age($s_bdate);
echo "<table><tr><td>".$day. "</td><td>".$event. "</td>";
echo "<td>Данное событие произошло $s_bdate. Это было $age " . s_years($age) . " назад.<br/></td></tr></table>";	  
}
}else echo 'Событий нет!';

Осталось вывести "Вчера...", "Завтра...." Подскажите направление. Спасибо всем.
  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


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