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

Портал

Фото

Вывод сообщения через каждые N-дней


  • Чтобы отвечать, сперва войдите на форум
10 ответов в теме

#1 ku7mich

ku7mich

    Гуру

  • Пользователи
  • ФишкаФишкаФишкаФишкаФишкаФишкаФишкаФишкаФишкаФишкаФишкаФишка
  • 2 240 Сообщений:

Опубликовано 01 Ноябрь 2010 - 17:53

Вывод определённого сообщения каждые 4-дня. До 1-го ноября всё было пучком, а вот первого, разность между датами равняется 15, вместо 16. Где я тупанул, подскажите?

<?php 
setlocale(LC_TIME, "ru-RU");

// Дата одного из респов, начало отсчёта для счётчика
$sd=date ("d-M-Y", mktime(0,0,0, 10, 16, 2010));

// Текущая дата
$cd=date ("d-M-Y", mktime(0,0,0));

// Периода респа. В данном случае 4 дня
$i=4;

$zd=($cd-$sd)%$i;
$dd=$i-$zd;

if ($zd==0)
{
	echo ("<div><font color=#ff0000><b>Сегодня большой респ!</font></b> Cбор в Ventrillo в: <b>10:00 (по Москве)</b></div>");
}
else
{
	echo ("<div>Следующий большой респ: <b>".strftime("%A %e %B %Y", mktime(0, 0, 0, date("m"), date("d")+$dd , date("Y")))."</b></div>");
}

?>

  • 0

#2 Sight

Sight

    жмот

  • Пользователи
  • ФишкаФишкаФишкаФишкаФишкаФишкаФишкаФишкаФишкаФишкаФишкаФишка
  • 5 577 Сообщений:

Опубликовано 01 Ноябрь 2010 - 20:47

А чему равна cd или zd, в определенный момент времени? В каком формате переменная?
Ваще прально он тебе минусует. 1-16= -15 :angry: Конечно если раньше было 28-16, 24-16, 20-16, все было намана и на 4 делилось :)
  • 0

#3 Mirima

Mirima

    Гуру

  • Пользователи
  • ФишкаФишкаФишкаФишкаФишкаФишкаФишкаФишкаФишкаФишкаФишкаФишка
  • 2 601 Сообщений:

Опубликовано 01 Ноябрь 2010 - 22:40

Разность между 1 ноября и 16 октября - 16 дней.

? DateDiff("d", "16-Oct-2010", "1-Nov-2010")
 16

В чем проблема, невовремя сообщение выходит?
  • 0

#4 U_Shlepak

U_Shlepak

    Добродушный циник

  • Пользователи
  • ФишкаФишкаФишкаФишкаФишкаФишкаФишкаФишкаФишкаФишкаФишкаФишка
  • 2 413 Сообщений:

Опубликовано 02 Ноябрь 2010 - 07:15

О чём речь ваще?! :angry:))))))))
  • 0

#5 ku7mich

ku7mich

    Гуру

  • Пользователи
  • ФишкаФишкаФишкаФишкаФишкаФишкаФишкаФишкаФишкаФишкаФишкаФишка
  • 2 240 Сообщений:

Опубликовано 02 Ноябрь 2010 - 09:00

А чему равна cd или zd, в определенный момент времени? В каком формате переменная?
$sd=date ("d-M-Y", mktime(0,0,0, 10, 16, 2010)) - задана вручную, выводит 16-Oct-2010
$cd=date ("d-M-Y", mktime(0,0,0)) - сегодняшняя дата, обновляется каждый раз, когда обновляется страница.
$zd - это остаток при делении разницы между днём сегодняшним ($cd) и стартовой датой ($sd).

mktime - Функция возвращает метку времени Unix, соответствующую дате и времени, заданным аргументами. Метка времени - это целое число равное разнице в секундах между заданной датой/временем и началом Эпохи Unix (The Unix Epoch, 1 января 1970 г). Соответственно $sd и $cd - целое число.

date_diff
(PHP 5 >= 5.3.0)
У хостера 5.2.5. Или ты предлагаешь через mysql?
Он мне 1-го числа выдал неправильное сообщение, т.е. не удовлетворял первому условию и вывел второе сообщение вместо первого.

Да, Sight прав, у меня вычитаются дни, а мне надо чтобы вычитались даты. Пойду чего-нибудь покурю.

Изменено: ku7mich, 02 Ноябрь 2010 - 09:04

  • 0

#6 алерген

алерген

    Бакалавр

  • Пользователи
  • ФишкаФишкаФишкаФишкаФишкаФишка
  • 242 Сообщений:

Опубликовано 02 Ноябрь 2010 - 09:15

для подсчета разницы в днях используй date с параметром z

z Порядковый номер дня в году (нумерация с 0) От 0 до 365


  • 0

#7 ku7mich

ku7mich

    Гуру

  • Пользователи
  • ФишкаФишкаФишкаФишкаФишкаФишкаФишкаФишкаФишкаФишкаФишкаФишка
  • 2 240 Сообщений:

Опубликовано 02 Ноябрь 2010 - 09:21

Не подходит. Что мне использовать через два года? Придётся снова дату начала отсчёта менять.
Сейчас нашёл ]]>самописную]]> функцию datediff или ]]>вариант чуть попроще]]>.
  • 0

#8 Mirima

Mirima

    Гуру

  • Пользователи
  • ФишкаФишкаФишкаФишкаФишкаФишкаФишкаФишкаФишкаФишкаФишкаФишка
  • 2 601 Сообщений:

Опубликовано 02 Ноябрь 2010 - 17:48

Попроще поясни, в чем проблема? На мой взгляд, код у тя работает верно. Дело не в функциях, а в том, чего ты хотел добиться.
  • 0

#9 geget

geget

    Бакалавр

  • Пользователи
  • ФишкаФишкаФишкаФишкаФишкаФишка
  • 248 Сообщений:

Опубликовано 02 Ноябрь 2010 - 23:45

попробуй так:
<?php
setlocale(LC_TIME, "ru-RU");

// Дата одного из респов, начало отсчёта для счётчика
//$sd=date ("d-M-Y", mktime(0,0,0, 10, 16, 2010));
$sd=date (mktime(0,0,0, 10, 16, 2010));

// Текущая дата
//$cd=date ("d-M-Y", mktime(0,0,0));
$cd=date (mktime(0,0,0));
//$cd=time();

// Периода респа. В данном случае 4 дня
$i=4;

$cd=($cd-($cd % 100))/100;
$sd=($sd-($sd % 100))/100;
$zd=(($cd-$sd)/864)%$i;
$dd=$i-$zd;


if ($zd==0)
{
	echo ("<div><font color=#ff0000><b>Сегодня большой респ!</font></b> Cбор в Ventrillo в: 

<b>10:00 (по Москве)</b></div>");
}
else
{
	echo ("<div>Следующий большой респ: <b>".strftime("%A %e %B %Y", mktime(0, 0, 0, 

date("m"), date("d")+$dd , date("Y")))."</b></div>");
}

?>

  • 0

#10 geget

geget

    Бакалавр

  • Пользователи
  • ФишкаФишкаФишкаФишкаФишкаФишка
  • 248 Сообщений:

Опубликовано 02 Ноябрь 2010 - 23:49

Делением на 100 обрубаем время от даты (альтернатива div, в php не припомню такой функции), затем разницу делим на 864 - один день. Не уверен на 100%, но должно работать, по крайней мере не извращаться со сторонними функциями.
  • 0

#11 ku7mich

ku7mich

    Гуру

  • Пользователи
  • ФишкаФишкаФишкаФишкаФишкаФишкаФишкаФишкаФишкаФишкаФишкаФишка
  • 2 240 Сообщений:

Опубликовано 13 Декабрь 2010 - 10:14

Спасибо, работает :). И действительно, что-то я сразу не подумал результат mktime на 100 разделить, меня ведь с самого начала эти нули в конце смущали.
  • 0


0 пользователей читают эту тему

0 members, 0 guests, 0 anonymous users